一、c++中的sizeof
1、一个空的class大小是1
2、添加构造函数和析构函数之后,大小还是1
3、添加虚析构函数
#include <iostream> using namespace std; class TestSizeof { public: void testfun(int a); TestSizeof(){} virtual ~TestSizeof(){} }; int main() { //1、一个空的class大小是1,为什么不是0?因为我们声明该类的实例是,在内存中就占用一定的空间 //至于占用多少,是编译器说了算 cout<<"sizeof(TestSizeof) = "<<sizeof(TestSizeof)<<endl; TestSizeof testsizeof; cout<<"sizeof(testsizeof) = "<<sizeof(TestSizeof)<<endl; //2、添加构造函数和析构函数之后,大小还是1, /** 调用构造函数和析构函数只需要知道函数的地址即可,而这些地址只与类型相关,而与类型 的实例无关,编译器也不会因为这两个函数而在实例内添加任何额外的信息。 注:不管添加的是构造函数还是析构函数还是其它任何类型的函数,都是这个结果 */ cout<<"sizeof(testsizeof) = "<<sizeof(TestSizeof)<<endl; //3、添加虚析构函数呢? /** C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表, 并在该类型的每一个实例中添加一个指向虚函数表的指针, 在32位机器上,一个指针占4字节空间,因此求sizeof得到4;如果是64位则为8。 */ cout<<"virtual sizeof(testsizeof) = "<<sizeof(TestSizeof)<<endl; return 0; }
二、sizeof struct
C语言中sizeof一个空的struct大小是0
C++中sizeof一个空的struct大小是1