【问题标题】:C++ struct memory allocation [duplicate]C ++结构内存分配[重复]
【发布时间】:2015-06-18 19:49:18
【问题描述】:

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

struct ComplexFloat {
  float r;
  float i;
};

我这样声明两个变量

struct ComplexFloat cf;
float *f=(float*)cf;

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

(&(cf.r)==&(f[0]) && &(cf.i)==&(f[1]))

?

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

我测试过,在 Ubuntu 上使用 gcc 4.8.2 就是这种情况,我只是想确保它始终有效。

【问题讨论】:

  • 那个表达式甚至无法编译,cf 不是数组或指针。
  • 如果这是出于学术好奇心,那很好,但如果是为了生产代码,您可能需要重新考虑您的设计。
  • 感谢@JoachimPileborg,我更正了问题
  • 另外,这将违反strict aliasing rule

标签: c++ memory struct


【解决方案1】:

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

【讨论】:

  • 它们的顺序必须相同
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多