为什么使用 boost 会增加文件大小这么多?

Ano*_*ous 5 c++ size boost

我注意到,当我使用增强功能时,应用程序大小往往会增加大约 0.1 - .3 MB。这可能看起来不多,但与使用其他外部库相比,它是(至少对我而言)。为什么是这样?

dsi*_*cha 4

Boost到处都使用模板。这些模板可以使用相同的参数多次实例化。一个足够聪明的链接器将丢弃除一个副本之外的所有副本。然而,并非所有链接器都足够智能。此外,模板有时会隐式实例化,甚至很难知道一个模板已被实例化了多少次。

  • “并非所有链接器都足够聪明”。愚蠢到留下相同代码的“多个副本”有时也被称为“内联”;-)。不过,说真的,模板比静态库更容易内联。除非您将选项设置为仅内联,否则不会增加代码大小,否则会增加代码大小。这甚至还没有出现任何直接的低效率(例如重复的外线代码)。 (3认同)
  • 您还将在引用每个标头的每个 obj 文件中获得一个副本。由于大多数模板都是在其他模板之上实现的,因此每个模板也乘以它使用的模板数量。仅在一个大项目中,您就可以轻松获得数以万计的 cout 模板副本。而且stl和boost的实现方式,代码无论如何都臃肿得可怕。另外,mem 碎片和优化杀死会疯狂发生,因为有太多 func ptr 和 smt ptr。简而言之,根本不使用 boost,并尽可能少用 stl。 (3认同)