gpt4 book ai didi

c++ - 对齐具有 vector 作为成员的结构 (c++)

转载 作者:行者123 更新时间:2023-11-28 07:53:05 24 4
gpt4 key购买 nike

struct bar {
int32 a; // 4 bytes
int32 b; // 4 bytes
vector<int> c; // something like 8 or 16 bytes?
}

当我执行 sizeof(bar) 时,它给出了 32 个字节!有什么方法可以对齐它以使其更小吗?任何潜力罚款?我不太确定 vector 部分...

最佳答案

正常执行std::vector<T, A>是有一个指针有三个指针加上,对于有状态分配器,维护分配器所需的一切:

  1. 指向 vector 起点的指针。
  2. 指向 vector 末尾的指针或 vector 中元素的数量。
  3. 指向已分配内存末尾或已分配元素数的指针。

将其放入类型时,可能会将其填充为 4 个字以缩短访问时间。当您将这样的 vector 与另外两个数据成员组合时,您自然会得到一个占用 8 个字的类型,其中三个字用于对齐类型以便快速访问。

如果您真的很在意 struct 的大小s 包含 vector 因为 vector 通常为空且很少包含数据,您可能更喜欢具有不同布局的实现: vector 仍需要启动上述信息,但它可以使用分配的缓冲区启动数据:当分配内存时, vector 将分配额外的空间以将其管理信息添加到实际值之前,并存储指向分配数据的指针(可能指向第一个元素,但是这使得管理信息的恢复不可移植)。

使用刚刚描述的表示, vector 的大小将是一个词和你的 struct 的总大小将是三个单词加上填充,即可能是 4 个单词。当需要 vector 的大小或容量时(例如,当使用 begin() 和 `end() 时),更好的大小会换取较小的开销。

一般来说, vector 的大小并不重要,因为 vector 的实际内存消耗取决于 vector 中的元素。

关于c++ - 对齐具有 vector 作为成员的结构 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com