gpt4 book ai didi

c - 可以内联动态库中定义的小型函数吗?

转载 作者:行者123 更新时间:2023-12-03 17:17:51 24 4
gpt4 key购买 nike

这是此问题的后续措施:Can the linker inline functions?

这次,我想知道是否进行了相同的优化,而不是在链接时,而是在链接到动态库时在运行时。有可能吗?现代操作系统能做到吗?为什么?

最佳答案

从理论上讲这是可能的,但是有很多理由不这样做。在实践中,“动态链接”并不是真正的完全链接。与位置无关的代码用于除主程序(可能还有主程序)以外的所有代码,从而不需要完整(静态)链接程序可能需要执行的全部重定位。取而代之的是,只需要少量的重定位类型,这基本上相当于在一个大的连续表中填充库中包含的函数和对象的地址。当然,在.data段中静态存储持续时间对象中的此类引用也必须填写,因此,与仅填充连续表相比,这需要做更多的工作,但要点是,仅数据而不是代码,被修改。

如果您完全开始修改代码,则将放弃动态链接的大多数优点:无法在应用程序/库的多个实例之间共享代码页,并且在启动复制时将花费更多时间(通过页面错误和写入时复制的语义)映射的代码页。这只是在代码中到处打补丁几个字节的最低成本。

对于实际内联动态库中的代码,您需要做的就是完全链接时间优化。测量LTO链接大型程序所花费的时间,然后问问自己,是否可以接受用户每​​次启动该程序这么长时间的等待。答案几乎肯定是没有。

关于c - 可以内联动态库中定义的小型函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com