c – DLL函数调用的开销

前端之家收集整理的这篇文章主要介绍了c – DLL函数调用的开销前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从DLL调用函数性能损失有多大?加载DLL对我们来说不是问题,对highperf库的调用次数不会很大.

大约一次调用多少指令/时钟周期接管静态库调用

解决方法

我的答案是基于 Linux / glibc / ELF动态链接器的工作原理,但我认为其他平台的总体答案是相同的:

第一次调用动态加载的符号与下一次调用之间存在差异.第一次通话很昂贵,可能涉及很多周期.所有其他电话或多或少都是1 – 2指令.

它的工作方式是链接器在Procedure Linkage Table中设置一个条目,该条目从Global Offset Table中获取该外部函数的地址.首先调用GOT的地址指向运行动态链接器的存根,以解析DLL中函数的实际地址.这可能需要很多周期,但是一旦完成一次,动态链接器将路径GOT条目直接指向函数,因此下次调用PLT代码时将直接调用函数.

这是一个很好地完成这个过程的链接http://www.technovelty.org/linux/pltgot.html

猜你在找的C&C++相关文章