繁体   English   中英

POD对象传染媒介记忆布局

[英]Memory layout of vector of POD objects

假设我有一个简单的C ++类,

class Data {

    public: 
         float data[3];         

         void clear() { data[0] = 0.0f; data[1] = 0.0f; data[2] = 0.0f }

}

和数据的矢量,

std::vector<Data> v(10);

假设&v[0].data[0]指向30个浮点数组是否安全?

从标准

23.3.6.1类模板矢量概述

向量的元素是连续存储的,这意味着如果v是一个向量,其中T是某种类型而不是bool,那么它服从所有0 <= n <v的身份&v [n] ==&v [0] + n 。尺寸()

所以&v[0]确实指向了10个连续Data对象的开头。

但是对于我们拥有的Data布局

9.2.13班级成员

分配具有相同访问控制(第11条)的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址。 未指定具有不同访问控制的非静态数据成员的分配顺序(11)。 实施对齐要求可能导致两个相邻成员不能立即分配; 因此,可能需要空间来管理虚拟功能(10.3)和虚拟基类(10.1)。

所以我们不能确定sizeof(Data) == 3*sizeof(float) ,因此一般的答案应该是:假设有30个连续的浮点值。

暂无
暂无

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

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