【问题标题】:optimization flag e.g. /O2 = optimize at File / Project / or Solution level?优化标志,例如/O2 = 在文件/项目/或解决方案级别进行优化?
【发布时间】:2019-06-01 10:32:24
【问题描述】:

我有一些视觉工作室项目:-

  • B1(无优化)
  • B2(优化/O2):使用B1作为静态库
  • B3(无优化):使用B1B2作为静态库

B3/main.cpp有什么优化效果?

这里的B3 会比B3/O2 的情况更快地编译(并且.exe​​ 的性能更差)吗?

我和/O2玩了很多次,但仍然对结果感到困惑。
我觉得标志是项目级别的。

如果我希望不经常修改B2,但经常修改B3,那么设置B2 = /O2B3 = no optimization 可能会更好地提高性能和最小编译时间。 (?)

对不起,如果这是一个新手问题。我懒得问几年了。

官方参考(没用):https://docs.microsoft.com/en-us/cpp/build/reference/o1-o2-minimize-size-maximize-speed?view=vs-2019

【问题讨论】:

  • 不清楚你想问什么。你想说什么“使用B1和B2”?顺便说一句,是 /O2 是项目级别标志。
  • @Atul 对不起,我的意思是静态库。我编辑了我的问题。谢谢。
  • 您需要小心地在同一个应用程序中混合未优化的调试静态库和优化的静态库——我认为它在链接时无论如何都不会工作。您需要使用相同的标志编译所有模块。
  • 没有唯一的答案。优化性能通常会增加编译时间和文件大小。静态链接不会影响编译时间,但会增加链接时间(例如,将 B1 复制到 B2 中)。对程序启动和运行时性能的影响取决于操作系统如何将程序加载到内存中。一般来说,我会在整个过程中使用相同的优化设置,因为管理以不同方式构建系统不同部分的构建过程的人力成本可能超过构建时间或运行时性能方面的任何可衡量的收益。

标签: c++ visual-studio optimization


【解决方案1】:

/O2 是项目级别标志。

对于您的项目 B3,使用的库(B1 和 B2)的优化级别无关紧要。只要 ABI 相同,您就可以使用 this answer 中提到的不同优化的库。

现在让我们回答你的问题。

这里的 B3 会比 B3 也 /O2 的情况编译得更快(并且 .exe 的性能更差)吗?

优化标志是关于二进制文件的速度和大小,而不是编译时间。如果将/O2 指定为B3B3 可执行文件会更快

如果我希望不经常修改 B2 但经常修改 B3 ,可能是 更好的性能和最小编译时间来设置 B2 = /O2 & B3 = 没有优化。 (?)

同样,优化标志不用于减少编译时间。为了获得 B3 可执行文件的更好性能(速度),请使用 /O2 编译它

【讨论】:

  • 嗯。我很确定“优化 = 更长的编译时间”。
  • @cppBeginner:它可能是也可能不是优化标志设置的副作用。但优化并不意味着用于减少或延长编译时间。
  • 因此,在我的示例中,每个项目将独立使用自己的标志?因此,您对我的“(?)”的回答是“是”?
  • 顺便说一句,我知道“/O2 增加编译时间”是一个(不利的)副作用。不用解释了,谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2015-05-06
  • 2017-07-05
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多