6

我目前使用以下预处理器定义和各种优化设置:

  • WIN32_LEAN_AND_MEAN
  • VC_EXTRALEAN
  • 标称最大值
  • _CRT_SECURE_NO_WARNINGS
  • _SCL_SECURE_NO_WARNINGS
  • _SECURE_SCL=0
  • _HAS_ITERATOR_DEBUGGING=0

我的问题是其他 SOers 还使用、添加、定义了哪些其他东西,以便从 VS C++(2008,2010)获得尽可能高性能的发布模式构建?

顺便说一句,我尝试过 PGO 等,它确实有一点帮助,但没有什么能与 GCC 相提并论,而且我没有使用流,我说的 C++ 更像 C,但使用模板和 STL 算法等等

就目前而言,与 GCC 在运行 linux(2.6+ 内核)的等效 x86 机器上使用 02 生成的相比,非常简单的代码段在性能方面显得苍白无力。

旁注:我相信很多问题都与 MS 提供的 STL 版本(Dinkum)直接相关。人们能否详细说明在 VS C++ 中使用 STLPort 等的经验。

4

1 回答 1

1

我看不到如何包含:

_CRT_SECURE_NO_WARNINGS
_SCL_SECURE_NO_WARNINGS

..为您提供更好或更高性能的构建。您所做的只是禁用有关 MS CRT 已弃用功能的警告。如果您这样做是因为您知道自己在做什么并且需要与平台无关的代码,否则我会重新考虑。

更新:此外,编译器只能做这么多。我敢打赌,如果您检测和修复现有的热点,而不是试图从编译和链接阶段获得微小的百分比(如果那样的话)收益,您将获得更高性能的代码。

UPDATE2 : _HAS_ITERATOR_DEBUGGING 根据MSDN编译发布版本时不能使用。WIN32_LEAN_AND_MEAN VC_EXTRALEAN(并且可能NOMINMAX虽然性能不是禁用此功能的主要原因)可能会给您带来一些性能提升,尽管其余所有的价值都值得怀疑。你应该更喜欢正确的快速代码(也许——我强调也许)稍微快一点但更容易冒险的代码。

于 2010-03-17T13:33:35.847 回答