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++ 内存对齐原则及作用

猜你喜欢

转载自www.cnblogs.com/Hwangzhiyoung/p/9341540.html