On Apr 12, 2008, at 6:09 PM, Martin C. Martin wrote: > > > Robert Bradshaw wrote: >> On Apr 12, 2008, at 4:09 PM, Lisandro Dalcin wrote: >> >>> I've just realized that using a string or buffer object for >>> automatic >>> management of memory as I proposed has a pitfall: memory >>> alignement is >>> not guaranteed. >>> >>> So perhaps the only way to go is with this trick is to use a custom >>> python object internally calling malloc/free. >> >> It looks like strings are aligned on int boundaries (given their >> struct). > > On 64 bit machines, gcc uses 32 bits for ints, so simply aligning > on int > boundaries wouldn't get you 64 bit aligned.
Yes. I was just noting that int was the smallest type in the string struct before the data. > >> What guarantee does one have about malloc? > > It depends on the implementation. For glibc: > > http://www.gnu.org/software/libc/manual/html_node/Aligned-Memory- > Blocks.html#Aligned-Memory-Blocks > > "The address of a block returned by malloc or realloc in the GNU > system > is always a multiple of eight (or sixteen on 64-bit systems)." > > You could always do what memalign() does: if e.g. you need something > aligned on 8 byte boundaries, but Python's string allocation only > uses 4 > byte boundaries, then allocate an extra 4 bytes, and if the result > isn't > 8 byte aligned, return the address + 4. If we're going to provide something like this, I'd make our own object that's even simpler than a string. - Robert _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
