我注意到当我使用提升功能时,应用程序大小往往会增加大约0.1到0.3 MB。这可能看起来不多,但与使用其他外部库相比,它(至少对我而言)。这是为什么?
答案 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在其包含文件中包含了大部分实现。