当前位置:  开发笔记 > 编程语言 > 正文

C GCC中的功能对齐

如何解决《CGCC中的功能对齐》经验,为你挑选了2个好方法。

我正在尝试使用'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的处理器调整中断服务程序.这样做的正确方法是什么?



1> Gonzalo..:

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


是的我可以做到这一点,但这会将所有函数对齐到16byte,而我只需要ISR就可以对齐16字节.但是,如果没有其他选择,我将不得不这样做.
@Sukanto,执行此操作,然后将该函数放在单独的C文件中.
那太容易了,不是吗?

2> Philip Conra..:

根据我对此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_optionspop_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;
        }
    }

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有