最近,我遇到了性能问题。在Vtune结果中,虚拟功能成本始终是第一成本,当我减小从48M到37M的尺寸时,性能似乎更好,提高3.9%。
我想知道,.so大小是否会影响虚拟功能,如果是这样,为什么?谢谢!
答案 0 :(得分:2)
它不是纯粹的 size (虽然当然会在加载程序后影响分页),但加载程序时加载器必须进行的调整的数量。您可以通过设置环境变量
来查看LD_DEBUG=statistics
虚拟功能尤其需要在加载过程中进行大量调整。有关此问题的讨论,
答案 1 :(得分:0)
我使用@ErikAlapää提供的文章(blogs.oracle.com/ali/entry/the_cost_of_elf_symbol)中的方法,当dlopen时使用RTLD_LAZY而不是RTLD_NOW。但是,似乎没有任何帮助。虽然我用较少的对象编译它,但它变得更好。看来分页缓存确实会影响流程性能。