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 */
這里給兩個鏈接做參考: