c++ - DLL的开销

标签 c++ windows dll

我有一个非常基本的问题。

  1. 当库仅由单个进程使用时。我应该将它保留为静态库吗?
  2. 如果我将库作为 DLL 使用,但只有一个进程使用它。 **间接费用是多少?*

最佳答案

拥有一个单独的 DLL 几乎没有开销。基本上,对从 DLL 导出的函数的第一次调用将运行一个微小的 stub 来修复函数地址,以便通过跳转表的单个跳转执行后续调用。 CPU 的工作方式,这种额外的间接寻址实际上是免费的。

主要的“开销”实际上是机会成本,而不是“开销”本身。也就是说,现代编译器可以做一些称为“整个程序优化”的事情,其中​​整个模块(.exe 或 .dll)在链接时一次编译和优化。这意味着编译器可以在整个程序的所有 .cpp 文件中执行调整调用约定、内联函数等操作,而不仅仅是在单个 .cpp 文件中。

对于某些类型的应用程序,这可以带来相当不错的性能提升。但当然,整个程序的优化不能跨越 DLL 边界。

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

相关文章:

.Net 和非托管 dll -> 内存问题

c++ - 导入 msado15.dll 时出错

c++ - 双数组求和结果在WIN32和WIN64上与C++不一致

windows - Vb.net 读取文件后不关闭文件

c# - 在 C# 应用程序性能中访问 C++ 代码

delphi - 延迟的 DLL 指令导致 FireDAC 查询上的应用程序死锁

c++ - 初学者 C "=="总是评估为 false

c++ - c++中大于零的指针是什么意思?

ruby-on-rails - 在 Windows Vista 上发出任何 Rails 命令时出现延迟

windows - 对规则进行过滤