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

时间:2010-01-23 02:59:29

标签: c++ boost size

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

“这么多”是一个比较术语,我担心你将苹果与橙子进行比较。仅仅因为其他库较小并不意味着你应该假设Boost一样小。 看看Boost为你做的大量工作!

我怀疑使用相同功能的自定义库可能会有相当小的尺寸。唯一有效的比较是“Boost的库做X”而不是“另一个做X的库”。不是“Boost的做X的库”和“另一个做Y的库。”

文件系统库非常强大,这意味着很多功能,以及大量的骨干代码,为您和我提供了一个简单的界面。此外,像其他提到的模板一般可以增加代码大小,但这不是一个可以避免的事情。模板或手动编码,任何一个都会产生相同大小的代码。唯一的区别是模板更容易。

答案 2 :(得分:0)

这完全取决于它的使用方式。由于Boost是一堆模板,因此每个使用的类型都会编译一堆成员函数。如果对 n 类型使用boost,则会定义成员函数(通过C ++模板) n 次,每种类型一个。

答案 3 :(得分:-1)

Boost主要包含非常通用且有时非常复杂的模板,这意味着,编译器根据每次使用需要创建类型和函数,而不是简单地通过声明。换句话说,少量源代码可以产生大量的目标代码,以满足声明或使用的模板的所有变体。 Boost还依赖于标准库,同时也引入了这些依赖项。但是,最重要的贡献是Boost源代码几乎主要存在于包含文件中。包括标准c包含文件(在STL之外)通常包括非常少的源代码,并且主要包含原型,小型宏或类型声明而没有它们的实现。 Boost在其包含文件中包含了大部分实现。