我目前使用以下预处理器定义和各种优化设置:
- WIN32_LEAN_AND_MEAN
- VC_EXTRALEAN
- NOMINMAX
- _CRT_SECURE_NO_WARNINGS
- _SCL_SECURE_NO_WARNINGS
- _SECURE_SCL=0
- _HAS_ITERATOR_DEBUGGING=0
我的问题是,其他 SOer 还使用、添加、定义了哪些其他东西,以便从 VS C++(2008、2010)获得尽可能高性能的 Release模式构建?
顺便说一句,我已经尝试过 PGO 等,它确实有点帮助,但没有什么能与 GCC 相提并论,而且我没有使用流,我说的 C++ 更像 C,但使用模板和STL算法等。
就目前而言,与 GCC 在使用 02 运行 linux(2.6+ 内核)的等效 x86 机器上产生的性能相比,非常简单的代码段在性能方面显得苍白无力。
旁注:我相信很多问题直接与 MS 提供的 STL 版本 (Dinkum) 相关。人们能否详细说明在 VS C++ 中使用 STLPort 等的经验。
最佳答案
我不明白如何包含:
_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS
.. 为您提供更好或更高性能的构建。您所做的只是禁用有关 MS CRT 弃用函数的警告。如果您这样做是因为您知道自己在做什么并且需要与平台无关的代码,否则我会重新考虑。
更新:此外,编译器只能做这么多。我敢打赌,如果您对现有热点进行检测和修复,而不是试图从编译和链接阶段获得极小的 yield (如果有的话),您将获得更高性能的代码。
UPDATE2:根据 MSDN 编译发布版本时无论如何都不能使用 _HAS_ITERATOR_DEBUGGING . WIN32_LEAN_AND_MEAN
VC_EXTRALEAN
(可能还有 NOMINMAX
虽然性能不是禁用它的主要原因)可能会给你一些性能提升,尽管所有其他的都有可疑的值(value)。您应该更喜欢正确的快速代码,而不是(也许 - 我强调也许)速度稍快但风险更高的代码。
关于C++ 在 VS 中为 'better' Release模式构建定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2460170/