我刚刚从Linux上的g++编译器开始,并在编译器标志上遇到了一些问题。他们在这里
优化
我在-O1手册页面中读到了有关优化标志-O2、-O3和g++的文章。我不知道什么时候该用这些旗子。通常您使用什么优化级别?g++手册为-O2提供了以下内容。
优化更多。GCC执行几乎所有支持的优化,不涉及空间速度的权衡。当您指定-O2时,编译器不会执行循环展开或函数内联。与-O相比,此选项增加了编译时间和生成代码的性能。
如果它没有进行内联和循环展开,如何实现上述性能并推荐此选项?
静态库
如何使用g++创建静态库?在Visual中,我可以选择一个类库项目,它将被编译成"lib“文件。在g++中,什么是等价的?
发布于 2009-04-28 05:14:38
经验法则:
当您需要调试时,使用-O0 (和-g生成调试符号)。
准备发货时,请使用-O2。
使用gentoo时,请使用-O3.!
当您需要将其放在嵌入式系统上时,请使用-Os (优化大小,而不是提高效率)。
发布于 2009-04-28 13:43:52
gcc手册列出了每个优化级别的所有隐含选项。在O2中,您可以得到诸如常量折叠、分支预测和co之类的信息,这可以根据您的代码显著改变应用程序的速度。确切的选项与版本有关,但它们被详细记录下来。
要构建静态库,您可以使用ar,如下所示:
ar rc libfoo.a foo.o foo2.o ....
ranlib libfoo.aRanlib并不总是必要的,但是没有理由不使用它。
发布于 2009-04-28 05:06:42
关于何时使用什么优化选项-没有单一的正确答案。
某些优化级别有时会降低性能。它取决于您正在编写的代码类型和它所具有的执行模式,并且取决于您正在运行的特定CPU。
(为了给出一个简单的规范示例,编译器可能决定使用一个优化,使您的代码比以前稍微大一些。这可能导致代码的某一部分不再适合指令缓存,此时需要对内存进行更多的访问--例如,在循环中)。
这是最好的衡量和优化为任何你需要。试试看,衡量和决定。
一个重要的经验法则--对代码执行越多的优化,就越难使用调试器(或读取其反汇编)来调试它,因为C/C++源视图离生成的二进制文件越远。因此,在开发/调试时使用较少的优化是一条很好的经验法则。
https://stackoverflow.com/questions/796162
复制相似问题