代码之家  ›  专栏  ›  技术社区  ›  Satbir

动态链接库开销

  •  4
  • Satbir  · 技术社区  · 14 年前

    我有一个很基本的问题。

    1. 如果我将库用作DLL,但只有一个进程使用它。**开销是多少?*
    3 回复  |  直到 10 年前
        1
  •  11
  •   Dean Harding    14 年前

    几乎

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

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

        2
  •  3
  •   Mark Ransom    14 年前

    一个DLL有两个开销。首先,当DLL加载到内存中时,必须为加载DLL的实际地址固定内部地址,而不是链接器假定的地址。这可以通过重新建立dll最小化。第二个开销是当程序和DLL被加载时,因为对DLL的程序调用已经填充了函数的地址。除了非常大的程序和dll之外,这些开销通常可以忽略不计。

    我喜欢使用静态链接库,不是为了减少开销,而是为了尽量减少在程序中保留DLL的麻烦。

        3
  •  2
  •   Abyx    8 年前