什么是C ++优化&整个程序优化在视觉工作室

时间:2012-12-18 17:12:06

标签: c++ visual-studio optimization

基本上我想知道什么是c ++优化(/ O)&整个程序优化(/ GL)就是全部。

会很感激深刻的解释。

C++ optimizatoin

Whole Program Optimization

由于

3 个答案:

答案 0 :(得分:14)

整个程序优化是跨模块优化的一个方面。由于这些语言的编译模型,这在C和C ++的上下文中也称为链接时优化

基本上,想象一下程序的整个源代码被粘贴到一个文件,源文件和头文件以及库文件中。在这个假设的情况下,编译器将有很多额外的优化机会:内联,死代码删除,重复数据删除等。

跨模块优化是指任何尝试允许这种优化的技术,即使在C和C ++编译器惯用的传统的一次一个TU编译中也是如此。通常,这涉及将额外信息(甚至可能是整个已解析的源内容)添加到单个目标文件中,并允许链接器在看到应用程序的所有成分对象文件后执行某些编译任务。

答案 1 :(得分:4)

MSVC是所谓的Optimizing Compiler。 OC会获取您编写的代码并重写其中的一部分,以最大限度地减少内存占用,最大化执行速度,或两者兼而有之。他们通过利用代码运行平台的深入技术知识来实现​​这一目标,通常针对特定的指令集。

诸如MSVC,GCC,LLVM等许多其他公司都使用许多不同的技术来实现这一目标。技术本身超出了互联网帖子中可以解释的范围,即使我完全了解它们(我不知道)。但是你应该记住一些事情。

已优化的程序比未使用的程序更难调试。许多代码可能已经在程序中的执行顺序和位置方面被移动,并且符号被剥离。

通常,标准允许编译器对您希望的程序进行任何更改,只要程序的可观察行为相同“AS-IF”没有任何更改已经成型。

负责优化代码的编译器部分由多年来非常聪明的专业团队设计和编写。最终的结果是一个编译器,总的来说,它在优化代码方面要比你希望的好得多。通常,出于两个原因尝试实现自己的微优化是没有意义的。第一,编译器通常可以做得更好,而你编写的两个微优化会使编译器在实现自己的优化方面遇到困惑。通过手动微量优化代码,您实际上可能会使程序执行更糟

答案 2 :(得分:1)

整个程序优化在Visual Studio中称为LTCG - 链接时间代码生成 - 这是LTCG上的writeup