必须在彼此旁边声明的两个公共字段彼此相邻"在记忆中?

时间:2016-12-07 04:34:35

标签: c++ memory

在C ++中,如果我有一个类:

class Foo {
public:
  int a;
  char b;
private:
  char c;
};

这是否意味着当a的实例被分配时,b必须在内存中Foo旁边?

我已经阅读了一些标准here (n4296),我发现的唯一语言是

  

具有相同访问权限的(非联合)类的非静态数据成员   控制(第11条)被分配,以便后来的成员有更高的   类对象中的地址。

因此,这种语言听起来并不排除像" a,c,b"而不是" a,b,c"甚至" c,a,b"正如你所料。

我搜索了contiguous这个词,有趣的是在标准中只出现了21次,但我觉得他们可能会用不同的术语来描述这个想法"两个字段排列在这样的他们之间没有其他领域的方式。"

1 个答案:

答案 0 :(得分:2)

你引用的那一行之后的那一行回答了这个问题:

  

具有不同的非静态数据成员的分配顺序   访问控制未指定。实施一致   要求可能导致两个相邻成员不被分配   紧接着彼此

因此,根据编译器的实现,彼此相邻声明的两个字段可能会或可能不会“彼此相邻”。