sizeof() 输出值是多少?面试中也是经常会问到的,这里又了解了内存对齐的原则,作个记录。
1 #include <iostream> 2 using namespace std; 3 4 //内存对齐的规则: 5 //默认条件下,内存对齐是以class/struct中最大的那个基本类型为基准的(x倍数),如果class/struct中有自定义类型,则递归的取其中最大的基本类型来参与比较 6 7 struct A{ 8 char a; 9 int b; 10 short c; 11 }; 12 13 struct B{ 14 short c; 15 char a; 16 int b; 17 }; 18 19 class BigData 20 { 21 char array[33]; 22 }; 23 24 class Data 25 { 26 BigData bd; 27 int integer; 28 double d; 29 }; 30 31 //静态变量和静态函数不占有类的内存空间,它们只是作用域在类中,还有成员函数也占有类的内存空间 32 class C{ 33 public: 34 // void test1() 35 // { 36 // cout << "This is test1()" << endl; 37 // } 38 virtual void test2() 39 { 40 cout << "This is test2()" << endl; 41 } 42 static void test3() 43 { 44 cout << "This is test3()" << endl; 45 } 46 private: 47 static int a; 48 int b; 49 }; 50 51 52 53 int main(){ 54 C c; 55 cout << "sizeof(c) = " << sizeof(c) << endl; 56 57 cout << "sizeof(A) = " << sizeof(A) << endl; 58 cout << "sizeof(B) = " << sizeof(B) << endl; 59 60 cout << sizeof(BigData) << " " << sizeof(Data) << endl; 61 62 } 63 64 65 /*x64 gcc编译下 66 输出: 67 sizeof(c) = 16 68 sizeof(A) = 12 69 sizeof(B) = 8 70 33 48 71 */
这里给两个链接做参考: