繁体   English   中英

C ++向量的内存分配<bool>

[英]Memory allocation of C++ vector<bool>

C ++ STL中的vector<bool>类针对内存进行了优化,以便为每个存储的bool分配一个位,而不是一个字节。 每次我为vector<bool> x输出sizeof(x) ,结果是40个字节,创建了向量结构。 sizeof(x.at(0))始终返回16个字节,该字节必须是许多bool值的分配内存,而不仅仅是在零位置的那个。 16个字节覆盖多少个元素? 128到底是什么? 如果我的向量具有更多或更少的元素怎么办?

我想测量向量的大小及其所有内容。 我将如何准确地做到这一点? 是否有C ++库可用于查看每个变量分配的内存?

我认为没有任何标准方法可以做到这一点。 vector<bool>实现提供给您的有关其工作方式的唯一信息是reference成员类型,但是没有理由假定这与数据在内部的实际存储方式完全一致。 当您将迭代器取消引用到容器中时,只是获得了一个reference

因此,您已经有了容器本身的大小,这很好,但是要获取数据占用的内存量,您将必须检查实现的标准库源代码并从中获取解决方案。 虽然,老实说,这似乎是一件很奇怪的事情。

实际上,首先使用vector<bool>是一件很奇怪的事情。 以上所有这些基本上就是为什么如今它的使用被皱眉的原因:它几乎完全与其他标准容器设置的约定不兼容,甚至与其他vector专业设置的约定也不兼容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM