GCC - 仅在特定功能上启用编译器标志

Posted

技术标签:

【中文标题】GCC - 仅在特定功能上启用编译器标志【英文标题】:GCC - Enable compiler flags only on specific functions 【发布时间】:2012-10-17 01:51:53 【问题描述】:

在我正在处理的一个项目中,我正在尝试优化的一个大文件中有一个四重嵌套的 for 循环,我认为这将受益于使用 -funroll-all-loops 展开的编译器。但是,当我将此标志添加到编译器时,它会将其他循环展开到文件的其余部分,并使整个程序运行得更慢。有没有办法(可能通过#pragma)将编译器标志仅应用于文件中的某些函数而不是整个文件?

提前致谢。

【问题讨论】:

也许真正的问题是 4 个嵌套循环... 【参考方案1】:

GCC function attribute optimize 可用于为单个函数设置优化选项:

void foo(int bar) __attribute__((optimize ("unroll-all-loops")))


【讨论】:

【参考方案2】:

我建议将该特定函数移动到一个单独的 .c 文件中,该文件可以使用您想要使用的额外选项进行编译。这可能需要创建一个“foo_private.h”样式的头文件以在现有的 .c 文件和新的文件之间共享,从而允许它们共享在原始 .c 文件中声明为静态的任何变量

【讨论】:

以上是关于GCC - 仅在特定功能上启用编译器标志的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 GCC 编译具有特定编译器标志的代码文件的一部分?

如何关闭 gcc 编译器优化以启用缓冲区溢出

gcc 禁用特定文件/文件夹的 -Wall 标志

在 GCC 中编译时使用 `-Wextra` 标志的缺点

使用 GNU make 编译启用配置文件的包

CMake:配置期间不同的编译器标志?