我正在尝试使用'aligned(16)'属性将函数字节对齐到16字节边界.我做了以下事情: void __attribute__((aligned(16))) function() { }
(来源:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)
但是当我编译(gcc foo.c;没有使用makefile或链接器脚本)时,我收到以下错误:
FOO.c:99:错误:可能没有为'function'指定对齐
我尝试调整到4,8,32等,但错误仍然相同.我需要这个来为基于powerpc的处理器调整中断服务程序.这样做的正确方法是什么?
为什么不在编译时将-falign-functions = 16传递给gcc?
根据我对此GCC问题的回答,您可以尝试使用#pragma指令,如下所示:
#pragma GCC push_options #pragma GCC optimize ("align-functions=16") //add 5 to each element of the int array. void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } } #pragma GCC pop_options
在#pragma push_options
和pop_options
宏用于控制的范围optimize
编译的效果.有关这些宏的更多详细信息,请参阅GCC文档.
或者,如果您更喜欢GCC的属性语法,您应该可以执行以下操作:
//add 5 to each element of the int array. __attribute__((optimize("align-functions=16"))) void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } }