Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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++和FORTRAN(对不起)。我的一次签入导致整个应用程序的速度急剧下降(即下降了两倍或两倍以上),甚至在代码中不受我的更改影响的区域也是如此_C++_Linker_Profiling_Compiler Optimization - Fatal编程技术网

由于标头包含,代码执行速度减慢 我们这里有一个非常大的程序,它混合了C++和FORTRAN(对不起)。我的一次签入导致整个应用程序的速度急剧下降(即下降了两倍或两倍以上),甚至在代码中不受我的更改影响的区域也是如此

由于标头包含,代码执行速度减慢 我们这里有一个非常大的程序,它混合了C++和FORTRAN(对不起)。我的一次签入导致整个应用程序的速度急剧下降(即下降了两倍或两倍以上),甚至在代码中不受我的更改影响的区域也是如此,c++,linker,profiling,compiler-optimization,C++,Linker,Profiling,Compiler Optimization,事实: 几乎每一个模块的速度都降低了相似的数量——即使是那些没有使用我的代码的模块 可执行文件大约大6% 在签入之间未更改元数据 IDE/编译器是VS2010,处于发布模式 一些.lib文件的大小增加了一倍或三倍 我查看了一个.lib文件,它的大小增加了三倍,只有两个变化: a) 我已经包含了一个大的ish头文件,它又包含了许多其他的头文件——其中一些包含了相当复杂的内联代码。“附加包含目录”已从无或一个增加到约7个,因为每个头文件包含一个或多个其他头文件 b) 我已经从这个头文件中调用了4个函

事实:

  • 几乎每一个模块的速度都降低了相似的数量——即使是那些没有使用我的代码的模块

  • 可执行文件大约大6%

  • 在签入之间未更改元数据

  • IDE/编译器是VS2010,处于发布模式

  • 一些.lib文件的大小增加了一倍或三倍

  • 我查看了一个.lib文件,它的大小增加了三倍,只有两个变化:

    a) 我已经包含了一个大的ish头文件,它又包含了许多其他的头文件——其中一些包含了相当复杂的内联代码。“附加包含目录”已从无或一个增加到约7个,因为每个头文件包含一个或多个其他头文件

    b) 我已经从这个头文件中调用了4个函数,但是在运行速度变慢的过程中没有调用这些函数(也就是说,它们的执行不能减慢代码的速度,但是可以想象它们的包含会减慢代码的速度)

    尽管在论坛上搜索是否包含头文件会降低执行速度(与编译相反),我还是找不到一篇相关的文章。我的问题是:

    ?#包含任何形式的头(声明或内联)是否会降低代码执行速度?

    ?内联代码w.r.t.的执行速度(我知道“内联”只是给编译器的建议)是否存在定性或定量差异?

    ?.lib大小、.exe大小和执行速度之间的相关性是什么(我希望这里有很多不同且相互矛盾的相关性)?

    ?重构一些头文件,使其不需要包含其他头文件(通过将这些包含文件放入.cpp文件,从而减少我的“附加包含目录”)是否会改善我的情况,您认为呢?


    我想最后一个问题是这个问题的核心,因为它需要很多努力……

    更改头文件无法更改执行时间,除非您意外地在生成的二进制文件中包含构建调试或其他诊断代码的内容

    这是我的猜测,特别是考虑到输出文件大小的变化。

    • #包含任何形式的头(声明或内联)是否会降低代码执行速度? 好吧,如果你的应用程序必须

      这只会改变代码出现的位置,所以我相信它不会改变任何东西。(如果只将函数上移三行,代码不会变快/变慢,是吗?)

    • 内联代码w.r.t.的执行速度是否存在定性或定量差异(我知道“内联”只是给编译器的建议)

      也许吧。如果比较内联函数和非内联函数,内联函数可能会更快,因为它的代码将被复制粘贴到适当的位置,而普通函数将在函数调用上浪费一些时间

    • .lib大小、.exe大小和执行速度之间的相关性是什么(我希望这里有很多不同且相互矛盾的相关性)

      虽然我可以想象一个假设的情况,一个更大的文件会减慢速度,但我冒着风险说,大多数情况下没有相关性


    您的可执行文件可能更大,因为您可能重写了一些影响执行的宏(例如取消定义一个旨在排除某些代码的定义)。这也可能会导致性能下降(即,您不希望执行某些代码,但由于意外的宏重新定义),您是否使用COM?您的包含文件是否将STA更改为MTA,反之亦然?您的include文件现在是否拉入了一个库中,而在您使用动态链接(lib-pragma)之前,该库中有吗?include不再拉入lib,代码也不再动态链接吗?我重复一下Steve的,是否包含调试库

    DUMPBIN可能会为您提供有关实际构建内容的更多信息。将结果与旧版本进行比较,以查看是否有任何主要内容突出

    附加编辑: 检查测试机器上的内存使用情况,检查分页活动,以防较大的exe超过阈值

    #包含任何形式的头(声明或内联)是否会降低代码执行速度

    添加未使用的声明或添加未使用的内联定义不会降低执行速度。然而,我可以想象一些事情会减慢执行速度:

    • 一些#定义阻止常用函数的优化内联或宏变体由行后面的另一个标头提供
    • 重载一些常用的操作,可能是从标准库中加载的,其效率低于默认值
    内联代码w.r.t.的执行速度是否存在定性或定量差异(我知道“内联”只是给编译器的建议)

    如果代码不可用,它就不能内联。如果是,它可以。通常,编译器可以估计内联将节省多少,如果没有帮助,则不内联,但有时它可能会猜错。在这种情况下,结果将与通常情况下略有不同

    .lib大小、.exe大小和执行速度之间的相关性是什么(我希望这里有很多不同且相互矛盾的相关性)

    完全不同的个案。内联增加了代码的大小,但可以在每个调用站点上节省大量工作。但是更大的代码会占用更多的缓存,这会降低速度

    重构一些