c++隐藏符号增加重定位时间
C++ Hiding Symbols increases relocation time
我正在尝试优化超过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符号的代价
- 我的 c++ 应用程序中的运行时间从 0 增加到 60 太快了(例如一毫秒或一微秒)
- 我看到将我的类成员函数指定为内联实际上会增加执行时间,即使函数体非常小
- 霓虹灯增加了运行时间
- Incredibuild大大增加了链接时间
- 为什么未达到的 try-catch 块会增加运行时时间
- 为什么内存访问时间远远超过CPU缓存大小时会增加
- std::嵌入增加的链接时间
- 使用OpenMP库,执行时间如何取决于线程数量的增加
- C :从一定的时间戳启动计时器,然后将其增加
- 增加和减去时间
- 为什么要在我的OpenMP代码中增加执行时间
- MPI:输出时间随着处理器数量的增加而增加
- 将项目添加到 QListWidget 增加设计时间
- Cocos2D BezierBy 随着时间的推移而增加速度
- 使用 list::size() 后运行时间显著增加
- 使用大型数组索引增加访问时间
- 程序的内存使用量随着时间的推移而增加,但内存泄漏工具报告没有问题
- 将某个时间增加一天
- c++隐藏符号增加重定位时间
- 将后定位操作符增加一个以上