从本质上讲,我想知道什么是c++优化(/O)和整个程序优化(/GL)。
希望能有更深入的解释。


谢谢
发布于 2012-12-19 01:33:27
全程序优化是跨模块优化的一个方面。在C和C++环境中,这也称为链接时优化,这是由于这些语言的编译模型所致。
基本上,想象一下,你的程序的整个源代码被粘贴到一个单独的文件中,源文件、头文件和库文件,所有的一切。在这种假设的情况下,编译器将有很多额外的优化机会:内联、死代码删除、重复数据删除等。
跨模块优化是指任何试图允许这种优化的技术,即使在传统的一次一个TU的编译中也是如此,这是C和C++编译器的习惯。通常,这涉及到将额外的信息(甚至可能是整个解析的源内容)添加到各个对象文件中,并允许链接器在看到应用程序的所有配料对象文件后执行某些编译任务。
发布于 2012-12-19 01:34:27
MSVC是一种所谓的Optimizing Compiler。OCs采用您已经编写的代码,并重写其中的一部分,以便最小化内存占用,最大化执行速度,或者两者兼而有之。他们通过利用代码要在其上运行的平台的深入技术知识来做到这一点,通常针对特定的指令集。
诸如MSVC、GCC、LLVM和许多其他公司的OCs都利用许多不同的技术来实现这一点。这些技术本身远远超出了互联网帖子所能解释的范围,即使我知道所有这些技术(我不知道)。但有些事情你应该牢记在心。
已优化的程序比未优化的程序更难调试。许多代码可能在执行顺序和程序内的位置方面都被移动了,符号也被剥离了。
一般而言,该标准允许编译器对您的程序进行任何它想要的更改,只要您的程序的可观察行为是相同的"AS-IF“,没有进行任何更改。
编译器中负责优化代码的部分是由非常聪明的人组成的专门团队多年来设计和编写的。最终的结果是一个编译器,总的来说,它在优化您的代码方面比您所希望的要好得多。通常,出于两个原因,尝试实现自己的微优化是没有意义的。首先,编译器通常可以做得更好,其次,您编写的微优化将使编译器无法实现自己的优化。通过手动微优化您的代码,您实际上可能会使您的程序性能变得更差。
发布于 2012-12-19 01:38:25
整个程序优化在Visual Studio中被称为LTCG -链接时间代码生成-这是一个关于LTCG的writeup。
https://stackoverflow.com/questions/13938089
复制相似问题