c++ 內存對齊規則及例子


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 */

 

這里給兩個鏈接做參考:

為什么要進行內存對齊以及對齊規則

C/C++ 內存對齊原則及作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM