C++ 性能建议编译器-是否存在此类情况?
在一个CPU非常密集的项目中工作,并震惊地发现调试版本和发布版本之间存在约100倍的差异。我设法找到了一些令人不快的性能差的代码,但很明显,编译器优化了所有的“坏东西”,因为它知道这实际上是无关的噪音。罪魁祸首是C++ 性能建议编译器-是否存在此类情况?,c++,C++,在一个CPU非常密集的项目中工作,并震惊地发现调试版本和发布版本之间存在约100倍的差异。我设法找到了一些令人不快的性能差的代码,但很明显,编译器优化了所有的“坏东西”,因为它知道这实际上是无关的噪音。罪魁祸首是 for(auto x : xcoll) 而不是 for(auto &x : xcoll) 在一些地方。现在,您可能会认为编译器可能会问“您确定要这样做吗?”。我只是想知道是否有编译器或其他工具可以告诉你 您可能会问:“为什么您关心它,它只是调试版本?”。当我调试时,我需要到
for(auto x : xcoll)
而不是
for(auto &x : xcoll)
在一些地方。现在,您可能会认为编译器可能会问“您确定要这样做吗?”。我只是想知道是否有编译器或其他工具可以告诉你
您可能会问:“为什么您关心它,它只是调试版本?”。当我调试时,我需要到达故障点。我花了很长时间,几分钟才到达那里;令人沮丧
仅供参考,热代码路径
std::function
与原始函数指针的另一个重大区别将受到欢迎。“自动”问题是VisualStudio2019将遇到的问题:静态分析器比某些编译器进行更详细的检查。一些编译器还可以选择发出警告,警告那些被各种措施认为效率较低的构造(例如,gcc有-Weffc++
选项,如果代码没有遵循Scott Meyer的“有效C++系列”中的各种指导原则,就会发出警告)。但作为一般规则,编译器的优化是作为一系列的微优化来实现的,当这些优化组合在一起时,会产生更多的优化代码-因此编译器不一定拥有访问信息的手段,这些信息会说“这个源代码比那个好”@gast128-我使用的是vs2019,我会打开它,看看它说了些什么。@gast128-啊,我还没有那个版本,很高兴知道它的到来,这将是受欢迎的。“自动”问题是VisualStudio2019将遇到的问题:静态分析器比某些编译器进行更详细的检查。一些编译器还可以选择发出警告,警告那些被各种措施认为效率较低的构造(例如,gcc有-Weffc++
选项,如果代码没有遵循Scott Meyer的“有效C++系列”中的各种指导原则,就会发出警告)。但作为一般规则,编译器的优化是作为一系列的微优化来实现的,当这些优化组合在一起时,会产生更多的优化代码-因此编译器不一定拥有访问信息的手段,这些信息会说“这个源代码比那个好”@gast128-我使用的是vs2019,我会打开它,看看它在说什么。@gast128-啊,我还没有那个版本,很高兴知道它的到来