Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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/C++;GCC的优化_C++_C_Optimization_Gcc - Fatal编程技术网

C++ 什么是已知的C/C++;GCC的优化

C++ 什么是已知的C/C++;GCC的优化,c++,c,optimization,gcc,C++,C,Optimization,Gcc,我有很多代码需要优化并使其运行得更快。我用告诉我代码在哪里花费了很多时间。我使用以下命令获取统计信息 opreport -g -l -d 建议使用不同的标志来获得更好的统计数据,也许可以按行号而不是函数号找到 因此,我“认为”我看到的许多问题都与以下方面有关: 指针,多维数组 乘法 循环 我希望编译器更好地优化代码,从而帮助他。我使用word restrict将一些代码块分解到函数中,以告诉编译器我的指针数组不重叠 因此,我正在寻找(a)可以使代码运行更长时间的通用C结构,以及(b)如何帮

我有很多代码需要优化并使其运行得更快。我用告诉我代码在哪里花费了很多时间。我使用以下命令获取统计信息

opreport -g -l -d
建议使用不同的标志来获得更好的统计数据,也许可以按行号而不是函数号找到

因此,我“认为”我看到的许多问题都与以下方面有关:

  • 指针,多维数组
  • 乘法
  • 循环
我希望编译器更好地优化代码,从而帮助他。我使用word restrict将一些代码块分解到函数中,以告诉编译器我的指针数组不重叠

因此,我正在寻找(a)可以使代码运行更长时间的通用C结构,以及(b)如何帮助编译器优化代码


总的来说,谢谢你:根据我的经验,90%的时间都在修复愚蠢的错误(比如无意中复制而不是传递引用)以及调整算法和数据结构,这是造成显著差异的原因。只有当您完全完成了这些90%的优化时,考虑低级优化才有用


在您的情况下:如果
opreport
(我不知道,顺便说一句)告诉您应用程序的时间花在哪里,您就必须优化这些位。如果您需要帮助,您可能需要发布一些具体的示例

总的来说:根据我的经验,90%的时间修复愚蠢的错误(比如无意中复制而不是传递引用)以及调整算法和数据结构是造成显著差异的原因。只有当您完全完成了这些90%的优化时,考虑低级优化才有用


在您的情况下:如果
opreport
(我不知道,顺便说一句)告诉您应用程序的时间花在哪里,您就必须优化这些位。如果您需要帮助,您可能需要发布一些具体的示例<>这在处理重载操作符时尤其重要——根据库,这些时间可能是大的,并且在代码中看起来一点都没有。

我在C++中知道的最大的事情是对调用的方法要小心。在C++(和任何OO语言)中,隐藏一个非常小的接口后面的大量处理是非常微不足道的。
在处理重载运算符时,这一点尤其重要——根据库的不同,这些运算符可能是大时间接收器,在代码中看起来什么都不像。

这里有一个有争议的论点——如果存在“可以使代码运行更长的通用C构造”(我相信您认为存在这样的构造是正确的)然后,我希望一个好的优化编译器能够为它们进行优化。您不会透露您正在使用的编译器,而且我不是C/C++程序员,因此我很难建议使用任何特定的编译器标志或技巧


我提供的唯一具体建议是:非常仔细地研究分析工具的输出,只花时间优化程序中值得努力的部分。

这里有一个有争议的论点——是否存在“可以使代码运行更长的通用C结构”(我相信你认为有这样的结构是对的)那么我希望有一个好的优化编译器来为它们进行优化。你不会透露你正在使用的编译器,而且我不是C/C++程序员,所以我很难推荐任何特定的编译器标志或技巧来尝试


我提供的唯一具体建议是:研究分析工具的输出非常仔细,只花你的时间优化程序的那些值得去做的部分。

提防来自分析工具的报告,它们可能是误导性的。例如,考虑一个做大量字符串比较的应用程序,而不是别的什么。一个报告会告诉你,你花费了90%的时间。因此,很自然,您决定实现该代码的优化版本时,只会发现探查器告诉您,您仍在那里花费90%的时间(因为这是您的程序所做的一切…)

您必须熟悉您的应用程序,并将其应用于探查器,否则您可能会浪费精力


今天的编译器在优化方面做得相当好(特别是使用额外的标志作为选项)。您不太可能从语言级别的任何东西(即如何处理数组)中获益如果你想手动调整的话,你可能需要读写ASM。

提防来自分析工具的报告,它们可能是误导性的。例如,考虑一个做大量字符串比较的应用程序,而不是别的什么。一个报告会告诉你,你花了90%的时间在字符串比较函数中。因此,很自然,您决定实现该代码的优化版本时,只会发现探查器告诉您,您仍在那里花费90%的时间(因为这是您的程序所做的一切…)

您必须熟悉您的应用程序,并将其应用于探查器,否则您可能会浪费精力


今天的编译器在优化方面做得相当好(特别是使用额外的标志作为选项)。您不太可能从语言级别的任何东西(即如何处理数组)中获益—如果您想手动调整内容,您可能必须读/写asm。

嗯,优化有两种方法。
首先,可以优化体系结构。你知道,二进制搜索而不是冒泡搜索等等:)但说真的,我希望这一点是明确的。
第二个是技术性的:一个使用