10

我正在尝试使用 'aligned(16)' 属性将函数字节对齐到 16 字节边界。我做了以下事情: void __attribute__((aligned(16))) function() { }

(来源: http: //gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html

但是当我编译(gcc foo.c ;没有使用 makefile 或链接器脚本)时,我收到以下错误:

FOO.c:99:错误:可能未为“功能”指定对齐方式

我也尝试对齐到 4、8、32 等,但错误仍然相同。我需要它来为基于 powerpc 的处理器对齐中断服务例程。这样做的正确方法是什么?

4

3 回答 3

10

根据我对这个 GCC question的回答,您可以尝试使用#pragma directives,如下所示:

    #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 效果#pragma push_options的范围。有关这些宏的更多详细信息可以在GCC 文档中找到。pop_optionsoptimize


或者,如果您更喜欢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;
        }
    }
于 2013-01-12T14:57:04.773 回答
10

为什么不直接在编译时将-falign-functions=16传递给 gcc?

于 2009-12-16T07:14:08.570 回答
2

您可能正在使用不支持该属性的旧版 gcc。您提供的文档链接适用于 gcc 的“当前开发”。查看各种版本,该属性仅出现在 gcc 4.3 及更高版本的文档中。

于 2009-12-16T08:06:21.237 回答