c++隐藏符号增加重定位时间

C++ Hiding Symbols increases relocation time

本文关键字:定位时间 增加 符号 隐藏 c++      更新时间:2023-10-16

我正在尝试优化超过200个依赖项的库的加载时间。我尝试使用可见性属性隐藏符号,这使我减少了30%的导出符号的数量。

查看elf直方图,优化后桶的数量保持不变,但查找成功和不成功的次数减少了很多。布隆过滤器的大小从8kb减少到4kb,但设置的比特数从19%增加到24%。

尽管加载时间增加了,我认为这是由于在布隆过滤器中设置的位数比以前高。

查看依赖关系,我可以看到在重定位时,大约有400.000个符号被查找到我的库中,但没有成功。布隆过滤器用于过滤其中的大多数,但由于比特集的数量增加,误报的数量从3.6%增加到5,76%(我在互联网上找到了这个公式:假阳性=bitsets%^2)

做一些数学优化之前,我不得不搜索到我的图书馆14.440假阳性和优化后,这个数字上升到23.040。即使不成功的查找从1.7减少到1.1,比较次数仍然比以前高。

我还用calgrind测试了它,证实了优化降低了库的性能。库本身比以前快了大约2%,但重新定位时间大约高了1%(旧的strcmp调用从3575000增加到3617000)。

我还尝试使用export map来进一步减少导出符号的数量,这帮助我减少了50%的导出符号的数量。但更糟糕的是。桶的数量减半,但不成功的查找增加到1.4,布隆过滤器的大小增加到2kb,位集为29%,假阳性率为8.4%。

隐藏符号如何可能增加在重定位时完成的比较次数?如果布隆过滤器对结果的影响如此之大,为什么链接器宁愿减少它的大小,而不是减少误报的百分比?有任何链接选项,可以帮助我在这一点上?

提前感谢

我之前在寻找一个类似的媒体播放器应用程序。

使用direct binding确实有助于减少符号解析时间。

不确定隐藏符号对布隆滤镜的影响。

有任何链接选项,可以帮助我在这一点?

据我所知,没有办法调整符号查找中使用的布隆过滤器。

有一些很好的文章,但没有一个强调调整布隆过滤器。

bloom filter elf

elf符号的代价