如何解决如何减少动态库加载时间?
我有一个与189个共享库链接的二进制文件。我使用perf剖析了二进制文件,然后GNU加载程序ld.so占用了程序运行时间的40%,大约90毫秒的时间。
有什么方法可以优化动态库的加载时间,还是我不得不使用静态链接?
我运行了很多次这个程序。
解决方法
- 避免在库中使用C ++构造函数,因为它们会导致构造函数本身运行,解析符号和从硬盘驱动器加载代码的延迟
- 通过使用
-fvisibility=hidden
编译库(并为要导出的符号有选择地使用__attribute__((visibility("default")))
)来最小化导出符号的数量 - 使用
--as-needed
最小化库依赖性 - 确保已启用惰性绑定(即未设置
LD_BIND_NOW
并且库未使用-Wl,-z,now
进行编译) - 最后,您可以使用Prelink工具来静态地预先计算符号偏移量
可以通过导出LD_DEBUG=statistics
加载时间取决于几个因素:将库从媒体存储传输到内存所需的时间,要链接的符号数...以下是一些建议:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。