Nav*_*K N 30 c++ optimization g++ compiler-flags
我刚刚开始使用Linux上的g ++编译器,并对编译器标志有一些疑问.他们是这样的
优化
我阅读了有关优化标志的内容-O1,-O2并-O3在g ++手册页中.我不明白何时使用这些标志.通常你使用什么优化级别?g ++手册说明了以下内容-O2.
优化甚至更多.GCC几乎执行所有支持的优化,不涉及空速 - 权衡.指定-O2时,编译器不执行循环展开或函数内联.与-O相比,此选项增加了编译时间和生成代码的性能.
如果它没有进行内联和循环展开,那么如何实现所述性能,是否建议使用此选项?
静态库
如何使用g ++创建静态库?在Visual Studio中,我可以选择一个类库项目,它将被编译成"lib"文件.什么是g ++中的等价物?
jos*_*hk0 41
经验法则:
需要调试时,使用-O0(和-g生成调试符号.)
当您准备发货时,请使用-O2.
当你使用gentoo时,使用-O3 ......!
当您需要将其放在嵌入式系统上时,请使用-Os(针对大小进行优化,而不是针对效率进行优化).
gcc手册列出了每个优化级别的所有隐含选项.在O2,您可以获得常量折叠,分支预测和co等内容,这些内容可以显着改变应用程序的速度,具体取决于您的代码.确切的选项取决于版本,但它们会详细记录.
要构建静态库,请使用ar,如下所示:
ar rc libfoo.a foo.o foo2.o ....
ranlib libfoo.a
Run Code Online (Sandbox Code Playgroud)
Ranlib并不总是必要的,但没有理由不使用它.
除了循环展开和内联之外,编译器还可以执行许多优化。那里特别提到了循环展开和内联,因为虽然它们使代码更快,但它们也使其更大。
要创建静态库,请使用“g++ -c”生成 .o 文件,并使用“ar”将它们存档到库中。