我正在学习 gcc 优化。来自 Optimization levels ,假设在级别 Os 中,gcc 特别选择了减少可执行文件大小所需的优化。 我写了一个简单的程序。
#include<stdio.h>
int main()
{
const int k=7;
printf("k = %d\n",k);
return 0;
}
并针对所有级别进行了测试。 它给了我如下尺寸
O0 - 4883
O1 - 4883
O2 - 4867
O3 -4867
Os - 4879
它应该在级别 Os 中给出最小尺寸。但它没有这样做。 如果我错了,谁能告诉我。 谢谢
最佳答案
将优化级别视为编译器的指导风格,它们永远不会保证最小或最快的可执行文件,但会以最适合您目标优化级别的方式构建代码。
0s 不会测试所有级别然后选择最小的可执行文件,它只会使用倾向于更小可执行文件大小而不是更快执行的规则构建。
在您的程序中添加一些循环,以便为编译器提供更多选项,然后您可能会开始看到一些更显着的差异。如果您真的想了解优化级别的差异,请开始反汇编可执行文件并查看编译器生成的汇编代码并比较各种样式。
关于c - GCC 中用于减小可执行文件大小的优化级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17675124/