gpt4 book ai didi

c++ - DLL函数调用的开销

转载 作者:可可西里 更新时间:2023-11-01 18:25:54 28 4
gpt4 key购买 nike

从 DLL 调用函数时性能损失有多大?加载 DLL 对我们来说不是问题,对我们的 highperf 库的调用次数不会很大。

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

最佳答案

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

第一次调用动态加载的符号和接下来的调用是有区别的。第一次调用很昂贵,可能涉及许多周期。所有其他调用都或多或少 1 - 2 个指令。

它的工作方式是链接器在过程链接表中设置一个条目,从全局偏移表中获取该外部函数的地址。首先调用GOT的地址指向一个运行动态链接器的 stub 来解析函数在DLL中的真实地址。这可能需要很多周期,但是一旦完成一次,动态链接器就会将 GOT 入口直接指向该函数,因此下次调用 PLT 代码时将直接调用该函数。

这里有一个链接,可以很好地完成这个过程:http://www.technovelty.org/linux/pltgot.html

关于c++ - DLL函数调用的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293751/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com