【发布时间】:2011-06-18 01:33:41
【问题描述】:
当我们声明一个类的对象时它的内存布局是否连续(一个接一个)?如果它的连续而不是 padding 出现在其中(如结构填充) ?请帮助我了解类内存布局的概念
提前致谢。
【问题讨论】:
-
你能改写你的标题和问题吗?而不是使用短语“内存分配”,如果你是这样想的话,使用“内存布局”。
标签: c++ class static memory-management
当我们声明一个类的对象时它的内存布局是否连续(一个接一个)?如果它的连续而不是 padding 出现在其中(如结构填充) ?请帮助我了解类内存布局的概念
提前致谢。
【问题讨论】:
标签: c++ class static memory-management
当我们声明一个类的对象是 它的内存分配连续(一个 在另一个之后)?
标准不提供任何此类保证。对象内存布局由实现定义。
通常,数据成员的内存地址按照它们在类中定义的顺序增加。但是在遇到访问说明符(private、protected、public)的任何地方都可能会中断此顺序。 Lippman 在Inside the C++ Object Model 中对此进行了详细讨论。
编译器不允许这样做 但是,重新排列本身。这 标准要求所有数据 在 same public:, protected:, 或 私人:必须在那个 由编译器排序。 如果你 使用访问权限散布您的数据 说明符,但是,编译器是 允许重新排列 访问说明符分隔的块 数据来改进布局,这是 为什么有些人喜欢设置访问权限 每个数据前面的说明符 成员。
很有趣,不是吗?
【讨论】: