C++ 中内存分布比较复杂,主要分为堆、栈、.data区、代码段,在平时会涉及到一个类的内存大小,总结如下:
1. 普通的成员函数不会占内存,但是普通的成员变量占内存。
2. Static的变量和函数都不会占内存。static数据存放于.data区中,并不在堆栈中。
3. Virtual成员函数(包括纯虚函数)会占内存,因为会有一个vptr指向virtual table的原因,所以不管有多少个virtual函数,均只占一个sizeof(vptr)=4
4. 派生类:需要加上其基类的size
5. 空类中,编译器会自动加入一个字节。这么做是为了保证每个对象都有唯一的内存地址。例如:A 声明了b,c对象,如果不添加一个字节,b,c的起始地址会发生冲突。