You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

结构体成员在std::vector中的内存存储顺序是否有保障?

问题解答:结构体成员顺序在std::vector内存中的确定性

首先看你的代码实现:

struct xyzid{
  uint16_t i;
  uint16_t z,y,x;
};
      
std::vector<xyzid> example;

(...) // fill example

uint16_t* data = reinterpret_cast<uint16_t*>(example.data());

可以确保指针data指向的内存中,首个16位对应成员i,随后依次是z、y、x,之后是vector下一个元素的i、z、y、x。

原因如下:

  • C++标准明确规定,结构体的非静态成员会按声明顺序在内存中依次布局。你这里所有成员都是同类型的uint16_t,对齐要求完全一致,编译器不会插入额外的填充字节打乱顺序,所以单个xyzid对象的内存布局就是i→z→y→x。
  • std::vector的底层内存是连续的,容器中的每个xyzid对象会按顺序连续存储,每个对象的内部布局严格遵循结构体的成员声明顺序。
  • 通过reinterpret_cast将xyzid*转换为uint16_t*后,遍历该指针会按内存的连续顺序访问每个16位数据,完全匹配结构体成员的声明顺序,以及vector中元素的存储顺序。

内容的提问来源于stack exchange,提问作者ATK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:42:04