c - GCC 中用于减小可执行文件大小的优化级别

标签 c gcc compiler-optimization

我正在学习 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/

相关文章:

c - 是否需要释放用于函数返回变量的内存 (C)?

c - 如何在 C 中使用按位运算符判断一个数字是否等于另一个数字

c++ - O2 和 O3 优化的 FP 代码之间的行为截然不同

linux - 考虑性能因素编译 Chrome/Chromium

c - c 中 const char*[] 的指针赋值

编译 vsftpd 3.0.0 失败

c - C 中类似函数的宏定义

c++ - 我可以在处理它时保留编译器输出的格式吗?

objective-c - 算法代码优化 : Find the Equilibirum: Find an index in an array such that its prefix sum equals its suffix sum

c++ - 仅当循环中更新的变量是本地变量时才优化计算