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.

It can store it just before the address it returns. I have an example of this at https://github.com/jerro/pfft/blob/multidim/pfft/clib.d#L46 .
If the deallocate method takes the size of the returned block as a
parameter in addition to the pointer, the original pointer could
also be stored right after the end of the returned block.

Reply via email to