Question: How can I allocate random amount of stack space (using char
arrays or alloca, and then align pointer to that stack space and
reinterpret this chunk of memory as some structure that has some well
defined layout that guarantees alignment of certain variables as long
as the structure itself is aligned properly? How can I do so with 4.6+
GCC with full optimizations enabled with strict aliasing enabled (e.g.
without passing -fno-strict-aliasing).
Pseudo code:
struct my_array
{
char data[6666];
};
void * buffer = alloca(sizeof(my_array) + 32);
void * buffer32 = (((uintptr_t)buffer) + 31) & (~31);
assert( ((uintptr_t)buffer) % 32 == 0);
my_array * data = (my_array*)buffer32;
.... now use my_array, data->data is 32-byte aligned
I have a huge function that allocates multiple aligned arrays on the stack
using this approach and now it doesn't produce correct results with GCC
4.6+ (on arm, I didn't test it on x86).
I've spent 2 days trying to fix the issue, perhaps gcc mailing list is a
good place to ask for appropriate workaround? I want to ensure that the
function produces correct result even with strict-aliasing enabled.
Thanks.