On 01/05/13 21:00, pps . wrote: > 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.
I assume by gcc you mean the c compiler and not the c++ compiler. Otherwise, you could use c++ alignas. http://en.cppreference.com/w/cpp/language/alignas Are you, for some reason, limited to using just c? -regards, Larry