Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/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
Optimization 为什么静态库只是一包对象文件,没有任何通常相互依赖的优化或重新排序?_Optimization_Linker_Static Libraries_Object Files - Fatal编程技术网

Optimization 为什么静态库只是一包对象文件,没有任何通常相互依赖的优化或重新排序?

Optimization 为什么静态库只是一包对象文件,没有任何通常相互依赖的优化或重新排序?,optimization,linker,static-libraries,object-files,Optimization,Linker,Static Libraries,Object Files,当链接一个共享库(或者至少是一个Windows DLL)时,可以进行大量优化,所有函数和类都被放在一起并重新组织以获得最佳性能(或者我认为/希望如此) 为什么静态库只是一包对象?链接器(时间和性能方面)是否最好拥有包含在对象文件中的变量、函数、类等的列表,以便在链接使用此库的可执行或共享对象时,可以从静态库中已执行的相互依赖的优化传递中获益 静态库的创建不会花费太多时间(无论如何,只有有限数量的优化是可能的),但是使用该库的后续构建步骤会更快/更优化 PS:我在这里主要谈论的是链接时间优化,但由

当链接一个共享库(或者至少是一个Windows DLL)时,可以进行大量优化,所有函数和类都被放在一起并重新组织以获得最佳性能(或者我认为/希望如此)

为什么静态库只是一包对象?链接器(时间和性能方面)是否最好拥有包含在对象文件中的变量、函数、类等的列表,以便在链接使用此库的可执行或共享对象时,可以从静态库中已执行的相互依赖的优化传递中获益

静态库的创建不会花费太多时间(无论如何,只有有限数量的优化是可能的),但是使用该库的后续构建步骤会更快/更优化


PS:我在这里主要谈论的是链接时间优化,但由于所有流行的工具链都以拥有此功能为荣,我相信这个问题会以某种方式出现吗?请不要回答这个问题:它一直都是这样,或者说没有人想过要改变它。这不是我想要的…

这些文件中有原型。它们可能与您提到的列表类似

这些文件中有原型。它们可能与您提到的列表类似

链接时间代码生成和链接前优化之间存在冲突

假设从该库中,您仅使用固定参数调用函数Foo一次:
Foo(12)
。LTCG现在允许将Foo()实现简化为单一情况,从而使您以前可能收集到的所有优化和调用树信息无效

记住这一点,只有
Foo()
不调用
Bar()
的信息才能保留下来。不过,我不认为这会显著降低链接阶段的压力

排序信息同样受到探查器引导的优化的影响:哪些函数是需要分组在一起的热点,只能由最终的二进制文件确定



一般来说,优化似乎正在向链接阶段移动,而不是以前的阶段——虽然您建议的优化是可行的,但如果您将其与可使用的场景数量和代码中的额外复杂性(大致与bug数量成比例)进行权衡,则可能不会有回报链路时间代码生成和链路前优化之间存在冲突

假设从该库中,您仅使用固定参数调用函数Foo一次:
Foo(12)
。LTCG现在允许将Foo()实现简化为单一情况,从而使您以前可能收集到的所有优化和调用树信息无效

记住这一点,只有
Foo()
不调用
Bar()
的信息才能保留下来。不过,我不认为这会显著降低链接阶段的压力

排序信息同样受到探查器引导的优化的影响:哪些函数是需要分组在一起的热点,只能由最终的二进制文件确定



一般来说,优化似乎正在向链接阶段移动,而不是以前的阶段——虽然您建议的优化是可行的,但如果您将其与可使用的场景数量和代码中的额外复杂性(大致与bug数量成比例)进行权衡,则可能不会有回报

嗯。。。一直都是这样。也许您可以换一种说法:“是否有一种对象格式/扩展允许编译器明确地存储元数据(例如库中对象的相互依赖性),这可能会使链接时间优化更快、更智能?”(提示:如果你意识到你的问题要求的是毫无帮助的答案,请解决这个问题!)sehe:好吧,元数据并不是我真正想要的,它更像是一个包含所有内容的单一对象文件,而不是一个只包含一包其他文件的文件,其中包含代码:)好吧。。。一直都是这样。也许您可以换一种说法:“是否有一种对象格式/扩展允许编译器明确地存储元数据(例如库中对象的相互依赖性),这可能会使链接时间优化更快、更智能?”(提示:如果你意识到你的问题要求的是毫无帮助的答案,请解决这个问题!)sehe:好吧,元数据并不是我真正想要的,它更像是一个包含所有内容的单一对象文件,而不是一个只包含一包其他文件的文件,其中包含一些代码:)