没有数据的类的对象是否会占用内存?

时间:2012-12-30 16:16:04

标签: c++

  

可能重复:
  C++: What is the size of an object of an empty class?

我有一个没有数据的类,如下所示

class A {};

我用它来定义一个对象

A a;

我认为对象“a”有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?

如果对象“a”的类型为void,会发生什么。非常感谢!

2 个答案:

答案 0 :(得分:5)

  

我认为对象“a”有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?

IIRC标准要求每个对象都有一个地址,并且对象的最小大小(由sizeof返回)为1.也就是说,优化器可能会使该变量消失(可能除非你明确询问其地址。)

  

除非它是位字段(9.6),否则最派生的对象应具有非零大小并且应占用一个或多个存储字节。基类子对象可以具有零大小。 [...]

     

除非对象是零字段或零大小的基类子对象,否则该对象的地址是它占用的第一个字节的地址。两个不同的对象既不是位字段也不是零大小的基类子对象应具有不同的地址。 4

     

注4:在“as-if”规则下,允许实现将两个对象存储在同一个机器地址或不存储   如果程序无法观察到差异(1.9)。

(C ++11§1.8¶5-6)


  

如果对象“a”的类型为void,会发生什么。

void不能用于声明变量,因为它是“不完整的类型”。

  

void类型有一组空值。 void类型是不完整的类型,无法完成。

(C ++11§3.9.1¶9)

答案 1 :(得分:3)

理论上,它根本不需要占用任何内存。它可以完全优化。

sizeof一个班级不能是0,如果这就是你的意思。如果您打印出sizeof(a),您(大部分时间)都会获得1(无论它是什么,它都是非零值)。

此外,您不能拥有void类型的对象,因此最后一个问题没有意义。