使用DLL函数会有性能损失吗?

5
正如标题所说,与普通函数相比,调用dll函数是否会有性能影响?该dll将由dlopen加载。 编辑: 忽略dlsym的时间,因为我每个函数只执行一次。

1
在 Linux 下,你不会称之为 DLL。它被称为共享对象。共享对象的加载需要额外的时间,但一旦加载完成,与普通函数相比就没有任何区别了。 - Vinzenz
3个回答

5
调用DLL函数是通过地址间接进行的,编译器不能将其内联,因此性能略有损失。
只有在性能关键的内部循环中使用并经过分析后,才需要担心它们的性能。

好的,我会进行性能分析! :D - nakiya

0

是的,这会有一定的性能损失。您需要进行dlsym调用以获取函数的地址,然后使用该地址调用函数。由于与从同一模块中的函数调用相比增加了dlsym调用,因此它必须更慢。这有多重要?这取决于情况。唯一确定的方法是测量它。


你说得没错。但在我的情况下,我每个函数的程序生命周期内只执行一次 dlsym。此外,我使用函数指针来调用函数。那又怎样呢? - nakiya
在这种情况下,你只会失去本来可以通过静态链接的调用函数来进行优化的机会,例如内联、跨过程优化、常量传播等。换句话说,这与通过函数指针调用同一模块的函数并无太大差别。 - usta

0

找出答案的最好方法就是简单地测量...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接