C++对象的存储空间由非静态成员变量总和还有编译器为了CPU计算做出的数据对齐处理和支持虚函数所产生的负担的总和所决定的。
1.空类的情况下的空间大小?
#include <iostream>
using namespace std;
class Box{
};
int main(){
Box boxObj;
cout<<sizeof(boxObj)<<endl;
return 0;
}
输出为1,按道理应该是0,但是声明对象时必须在内存中占有一定的空间。C++中每个空类型的实例占用1Byte。
2.只有成员变量的类的存储空间
...
Class Box{
int length,width,heigth;
};
...
输出为12Byte,因为定义了3个int型变量,每个int型占用4Byte;
3.在2的基础上加上静态成员变量;
...
Class Box{
int length,width,heigth;
static int count;
};
...
输出为12Byte,静态数据成员不占用对象的内存空间;
4.加上虚析构函数
#include <iostream>
using namespace std;
class Box{
box{};
virtual ~Box(){}; //虚函数在类名前面加上一个~
}
int main(){
Box boxObj;
cout<<sizeof(boxObj)<<endl;
return 0;
}
输出为8,主要是指向虚函数表的指针的大小,这个大小随着电脑的位数而决定
定义一个成员函数,也不占用空间,函数代码是存储在对象空间之外的,定义多个对象这些对象的成员函数对应的是同一个函数代码段