我正在通过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中给出最小尺寸。但事实并非如此。 任何人都可以告诉我,如果我错了。 感谢
答案 0 :(得分:5)
将Optimization Levels视为编译器的指南样式,它们永远不会保证最小或最快的可执行文件,但会以最适合您所针对的优化级别的方式构建代码。
0s不会测试所有级别然后选择最小的可执行文件,它将使用倾向于更小的可执行文件大小而不是更快执行的规则来构建。
为您的程序添加一些循环,以便为编译器提供更多选项,然后您可能会开始看到一些更重要的差异。如果您真的想了解优化级别的差异,那么就开始反汇编可执行文件,看看编译器生成的汇编代码,并比较各种样式。