DLL的开销

Sat*_*bir 5 c++ windows dll

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

  1. 当库仅由单个进程使用时.我应该把它作为静态库吗?
  2. 如果我将库用作DLL,但只有一个进程使用它.**开销会是多少?*

Dea*_*ing 11

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

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

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