Did you mean, x86-32 (or 32-bit ARM, for that matter)? It’s important to be clear.
Just what are the pool sizes and alignments for 32-bit and 64-bit platforms for v0.6.x and master?
All that means is that when I start using SIMD instructions, the first chunk will need the first 8 bytes masked off (I’m not going to worry about SIMD on 32-bit platforms - my optimizations using a pointer sized chunk that I’ve already done will have to be enough).
Don’t they still have an Int
length, followed directly by the bytes (and for String
, have a '\0'
at the end)?
Can some other data immediately follow that '\0'
byte?
At least from Jeff’s replies to my messages, for memory that I allocate with Base._string_n
, it is my understanding that that it will always be allocated in at least 2*sizeof(Ptr{UInt8}) chunks.
Is there a 24-byte pool on 64-bit machines, that would make the allocation not always be 16-byte aligned (with the first byte after the length somethings being 8-byte aligned, other times 16-byte aligned), or is it only 16 / 32 / …?
You never answered another very important point - you’d said that pointer
, and unsafe_load
/unsafe_store!
were not defined to work on Julia objects.
Can you point to any documentation of that? If it is true, then is the code doing just that in Base incorrect?