gpt4 book ai didi

c++ - 哪个链接更快?许多小的 .so 文件还是几个大的 .so 文件?

转载 作者:行者123 更新时间:2023-11-28 05:03:23 24 4
gpt4 key购买 nike

我有一个大型的 c++ 项目 (g++/linux),其中生成了大量代码,其中构建系统按深度 = 1 的目录名称将生成的代码分组到 .so 文件中

这在释放较小的 block 时会导致一些问题,因此我试图使其更细化,即深度=5,这将增加 .so 文件的数量(增加 5 倍,从 20 到 100)但是允许我们在更精细的级别进行更改和部署

在干净构建期间,当一切都是从头开始构建时,有很多小的 .so 文件是否会影响链接时间?

最佳答案

这是关于 GNU/Linux 的吗?动态链接目前非常慢,因为依赖排序使用的算法大约是 O(n³) 或左右:

我们真的应该解决这个问题,但它还没有发生。 (有些人担心当依赖图中有循环时更改排序顺序,这就是为什么它很困难。)如果你只有几十个共享对象,你不会看到加载时间的影响,但它可能是如果您有 100 个或更多,就会出现问题。

关于您关于链接编辑器性能的原始问题:ELF 的一个奇怪方面是您可以链接到一个不包含任何符号的虚拟 DSO,并在运行时通过 -Wl 将其替换为适当的 DSO ,--unresolved-symbols=ignore-all 和一个空的 DSO 复制到您需要依赖项的所有 sonames。这个技巧可以让你并行链接大多数东西,而不管运行时的依赖性。这对于生产构建来说可能不是一个好主意,特别是如果您使用惰性绑定(bind),但在开发过程中,它可能会有所帮助。进行此更改后,将内容拆分为许多小型 DSO 可能不值得(但这实际上取决于您当前处理的库大小)。

另请记住,DSO 的部分升级可能会非常痛苦,一旦您的用户这样做,您就需要谨慎地管理依赖项并维护整个系统的 ABI 兼容性。对于小型 DSO,您还必须更频繁地处理将符号定义从一个 DSO 移动到另一个 DSO,如果您使用符号版本,这可能会遇到奇怪的障碍。

关于c++ - 哪个链接更快?许多小的 .so 文件还是几个大的 .so 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45389148/

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