![](/img/trans.png)
[英]c++: how to insert data to a struct member (struct located in vector)
[英]align struct having vector as a member (c++)
struct bar {
int32 a; // 4 bytes
int32 b; // 4 bytes
vector<int> c; // something like 8 or 16 bytes?
}
当我执行sizeof(bar)时,它会提供32个字节! 无论如何,我会对准它是更小的东西? 有任何潜在的惩罚吗? 我不太确定矢量部分...
std::vector<T, A>
的常规实现是有一个指针,该指针要有三个指针,对于有状态分配器,无论维护分配器需要花费什么:
将此类型键入时,可能会将其填充为4个单词以缩短访问时间。 当您将这样的向量与另外两个数据成员组合在一起时,您自然会得到一个占用8个单词的类型,其中三个用于对齐该类型以便快速访问。
如果您真的很在意包含向量的struct
的大小,因为向量通常是空的,并且很少包含数据,那么您可能希望使用具有不同布局的实现:向量仍然需要启动上述信息,但是它可以从分配的缓冲区开始数据:在分配内存时,向量将分配额外的空间以将其管理信息添加到实际值之前,并存储指向分配的数据的指针(可能指向第一个元素,但是该元素将恢复管理信息不可移植)。
使用刚刚描述的表示形式,向量的大小将是一个单词,而struct
的总大小将是三个单词加上填充,即大约4个单词。 当需要向量的大小或容量时(例如,使用begin()
和`end()时),可以用较小的开销换来更好的大小。
通常,向量的大小往往无关紧要,因为向量的实际内存消耗取决于向量中的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.