std.allocator needs your help

Peter Alexander peter.alexander.au at gmail.com
Mon Sep 23 15:12:05 PDT 2013


On Monday, 23 September 2013 at 21:27:36 UTC, Andrei Alexandrescu 
wrote:
> That allocator would allocate more memory (I suspect there's a 
> gcd calculation somewhere :o)) and then adjust the starting 
> pointer of the allocated block to reach the requested alignment.

That's quite an inefficient use of memory for large alignment 
sizes.

Also, how does it work with your deallocate interface? Suppose I 
request an 0x100 aligned block of 0x100 bytes. Your alignment 
allocator requests 0x200 from the GC, which maybe returns 
[0xffff0040-0xffff0240] and then returns an aligned buffer from 
that [0xffff0100-0xffff0200]. Later, I try to deallocate that 
buffer, which means your alignment allocator has to deallocate 
the original buffer. Where does the alignment allocator store the 
original GC-provided buffer ptr + size? It cannot be determined 
from the buffer I gave it.


> I'd need a handful of good examples where the alignment must be 
> known at runtime. Can you link to some?

mprotect requires a pointer that is a multiple of the system page 
size, which isn't constant.

http://linux.die.net/man/2/mprotect


Reading a file without buffering on Windows requires that you 
align the destination buffer on volume sector size boundaries, 
which is not known at compile time (although many just assume 
4096).

http://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx


As I mentioned previously, you may want to also align to the 
cache line size (for performance). This is not known at compile 
time (although again, is often assumed in practice).


More information about the Digitalmars-d mailing list