3

静态成员变量的大小是不算算子的sizeof,所以我猜是在数据段。我对吗?

4

2 回答 2

3

猜对了。静态成员本质上是全局变量,但不在全局变量命名空间中。它们的存储在数据段中。

编辑:如果一个实现发现可以将静态成员存储在一些不寻常的存储位置,那没关系。静态成员的语义保持不变,它们的自然存储位置是全局数据。静态成员不是对象实例的一部分,因此它们不计入大小。

我认为这是对这个问题的足够准确的回答,因为没有迹象表明 coinyx 正在要求 C++ 标准的正式注释。

我要补充一点,Trojanfoe 对遗留 x86 系统以及可能的其他系统都是正确的。在这种情况下,初始化的变量通常会进入数据段,而未初始化的数据会进入 bss 段。此外,也可以从 bss 段分配主堆栈。其他线程堆栈将分配到其他地方。静态成员不会被认为是堆栈分配的。

于 2013-09-15T06:13:14.407 回答
2

静态数据,包括静态成员,放置在数据段中。但是为什么你认为sizeof操作符不计算静态成员变量的大小呢? sizeof给出变量类型的大小.

于 2013-09-15T06:15:26.833 回答