C ++ STL中的vector<bool>
类针对内存进行了优化,以便为每个bool
存储分配一位,而不是一个字节。每次输出sizeof(x)
vector<bool> x
时,结果都是40个字节,从而创建了矢量结构。 sizeof(x.at(0))
总是返回16个字节,它必须是许多bool
值的已分配内存,而不仅仅是位置零的值。 16个字节包含多少个元素? 128究竟是?如果我的矢量有更多或更少的元素怎么办?
我想测量矢量的大小及其所有内容。我该如何准确地做到这一点?是否有可用于查看每个变量的已分配内存的C ++库?
答案 0 :(得分:4)
我认为没有任何标准方法可以做到这一点。 vector<bool>
实现提供的关于它如何工作的唯一信息是reference
成员类型,但是没有理由认为这与数据在内部实际存储方式有任何一致性;只是当你将迭代器解引用到容器中时,你得到一个reference
。
所以你已经获得了容器本身的大小,这很好,但为了获得数据占用的内存量,你将不得不检查你的实现的标准库源代码并获得一个解决方案从那以后。但老实说,这首先想要一件奇怪的东西。
实际上,首先使用vector<bool>
是一件奇怪的事情。以上所有内容基本上都是为什么它的使用现在不受欢迎:它几乎完全不兼容其他标准容器设置的约定......甚至是其他vector
专业设置的约定。