类的内存布局是连续的吗?

fud*_*din 0 c++ static memory-management class

当我们声明一个类的对象是它的内存布局是连续的(一个接一个)?如果它的连续性比在它中发生填充(就像结构填充)?请帮我一个类内存布局的概念

提前致谢.

Naw*_*waz 7

当我们声明一个类的对象是它的内存分配是连续的(一个接一个)?

标准没有给出任何此类保证.对象内存布局是实现定义的.

通常,数据成员的内存地址按照它们在类中定义的顺序增加.但这个顺序可以在其中访问修饰符(任何地方被打乱private,protected,public)遇到.这已经很详细的讨论里面的C++对象模型李普曼.

来自C/C++ Users Journal的摘录,

但是,编译器本身不允许进行这种重新排列.该标准要求编译器必须按顺序排列同一 public:,protected:或private:中的所有数据.但是,如果您使用访问说明符散布数据,则允许编译器重新排列访问说明符分隔的数据块以改进布局,这就是为什么有些人喜欢在每个数据成员之前放置访问说明符.

有意思,不是吗?

  • @David:事实并非如此.实际上,编译器之间具有互操作性的唯一方法是坚持使用普通的旧C. (4认同)