Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 性能建议编译器-是否存在此类情况?_C++ - Fatal编程技术网

C++ 性能建议编译器-是否存在此类情况?

C++ 性能建议编译器-是否存在此类情况?,c++,C++,在一个CPU非常密集的项目中工作,并震惊地发现调试版本和发布版本之间存在约100倍的差异。我设法找到了一些令人不快的性能差的代码,但很明显,编译器优化了所有的“坏东西”,因为它知道这实际上是无关的噪音。罪魁祸首是 for(auto x : xcoll) 而不是 for(auto &x : xcoll) 在一些地方。现在,您可能会认为编译器可能会问“您确定要这样做吗?”。我只是想知道是否有编译器或其他工具可以告诉你 您可能会问:“为什么您关心它,它只是调试版本?”。当我调试时,我需要到

在一个CPU非常密集的项目中工作,并震惊地发现调试版本和发布版本之间存在约100倍的差异。我设法找到了一些令人不快的性能差的代码,但很明显,编译器优化了所有的“坏东西”,因为它知道这实际上是无关的噪音。罪魁祸首是

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-啊,我还没有那个版本,很高兴知道它的到来