C++ struct内存分配

oro*_*uig 5 c++ memory struct

在C++中,如果我定义这样的结构

struct ComplexFloat {
  float r;
  float i;
};
Run Code Online (Sandbox Code Playgroud)

我声明了两个像这样的变量

struct ComplexFloat cf;
float *f=(float*)cf;
Run Code Online (Sandbox Code Playgroud)

我可以安全地假设以下条件永远是真的

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1]))
Run Code Online (Sandbox Code Playgroud)

换句话说,我可以安全地假设在包含浮点数的结构中,它的元素将占据内存中的连续位置,并将根据它们在结构定义中出现的顺序排序吗?

我测试过,在Ubuntu上是gcc 4.8.2的情况,我只是想确保它始终有效.

pm1*_*100 2

不,除非您控制结构中数据的对齐方式,否则您不能假设 i 将位于正确的位置。r 和 i 之间可能存在对齐填充