std :: vector <bool>优化实现

时间:2016-07-11 04:54:11

标签: c++ optimization vector boolean tdm-gcc

documentation中,我可以看到std::vector<bool>通过使每个布尔占据一个位来优化空间效率。来自文档:

  

std :: vector的空间效率(以及它是否完全优化)是实现定义的。

这是否意味着它取决于编译器的实现? 如果是,我在哪里可以检查我的编译器是否支持它?为什么他们不希望它支持?这似乎是一个非常简单而有效的实现。

如果没有,它是什么意思,如果我想要进行这种优化,它意味着什么呢?

我正在使用TDM GCC工具集。

3 个答案:

答案 0 :(得分:3)

实现定义意味着它取决于抽象机器的参数构成。 (I.E.,定义主机操作系统的算法,它们的实现规范和系统调用)。关于什么&#34;实施定义的“Q&amp; A”是指here

很可能,如果你有一台带有现代编译器/ IDE的现代机器,它支持实现定义。

如果编译器不支持它,则不太可能因为他们不想要&#34;#34;它,但因为它是一个非常古老的编译器,或者是一个资源有限的机器。

归结为它取决于机器;所以不同的操作系统将以自己的方式完成它。 (即,32位与64位等)除非使用(非常多)较旧的编译器,否则它不会影响可移植性。您可以查看编译器版本的规范,如果它是一个问题,可以通过搜索编译器及其版本在线轻松找到。

答案 1 :(得分:2)

形式语言定义并不想排除合理的实现,因此它们总是要小心。

例如,典型的调试版本仍然符合标准,但我很清楚vector<bool>在调试模式下没有被压缩。

现在这不是未指定,而是实现定义。这意味着它的压缩是否应该在某个地方的编译器文档中,但标准没有描述如何组织文档。

如果您的编译器不支持它,您可以使用另一个库(Boost是明显的候选者)。 vector<bool>通常不是一个依赖于深层编译器魔力的类,所以替代方案很容易编写。

答案 2 :(得分:0)

它依赖于实现,而不是可移植的。它似乎有一些设计缺陷,你应该避免使用vector<bool>。您可以从Meyers的“有效STL,第18项”中获得更多详细信息。

如果你真的关心空间效率,可以改用std::bitset