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



Reply via email to