c++类不含有数据成员(静态除外),则不会为该类实例分配存储空间,该类实例只占用一个字节空间
见如下分析过程
1、类Counter 除了一个静态数据成员外,没有其它任何非静态数据成员了
2、sizeof该类,其结果为1
3、引用该类实例时,基址寄存器加上偏移,如实例Counter o1;(lea rax,[rbp-0x11])
4、只有一个字节存储类实例相关信息,那么具体存了哪些信息呢?这个现还清楚的,通过dump该实例内容,其结果都是0
class Counter
{
public:
static int count;
Counter()
{
count++;
}
~Counter()
{
count--;
}
};
void f();
int main(void)
{
Counter o1;
cout << "Objects in existence: ";
cout << Counter::count << "\n";
Counter o2;
cout << "Objects in existence: ";
cout << Counter::count << "\n";
f();
cout << "Objects in existence: ";
cout << Counter::count << "\n";
return 0;
}
(gdb) p sizeof(Counter)
$1 = 1
Dump of assembler code for function main():
23 {
0x00000000004008e0 <+0>: push rbp
0x00000000004008e1 <+1>: mov rbp,rsp
0x00000000004008e4 <+4>: push rbx
0x00000000004008e5 <+5>: sub rsp,0x18
24 Counter o1;
0x00000000004008e9 <+9>: lea rax,[rbp-0x11]
0x00000000004008ed <+13>: mov rdi,rax
0x00000000004008f0 <+16>: call 0x400aa8 <Counter::Counter()>
... ....
28 Counter o2;
0x0000000000400923 <+67>: lea rax,[rbp-0x12]
0x0000000000400927 <+71>: mov rdi,rax
0x000000000040092a <+74>: call 0x400aa8 <Counter::Counter()>
(gdb) x /2bx $rbp - 0x12
0x7fffffffe4ce:0x000x00