struct 结构体内存对齐方式

来源:互联网 发布:sql while循环 编辑:程序博客网 时间:2024/06/02 09:01

     以下都以32位机器为例分析结构体类型的变量在内存里的存储:

一、

    1. 结构体变量的存储位置都是在内存中寻找地址是该变量自身大小整数倍开始存储的。

    2. 结构体类型变量的总大小应是该类型成员中最大数据类型的整数倍。

    就此两点,可以解决所有问题, 对于第一条,应该注意每一位成员存放的首地址定为自身的整数倍。

    例子如下:

  struct X

                 { 

                      int e;

                      double a;

                      char b;

                      int c;

                      char d;

                 }S;

该类型的变量占用的存储空间大小32字节,

http://img.blog.163.com/photo/Ug5opKfxvo-duZd6KI2Sjg==/3727291641603726221.jpg

二、对于任何指针类型的变量,其占用的大小都为4字节

三、结构体中嵌套结构体,对于该嵌套结构体的对齐应以该嵌套结构体里最大的数据类型为对齐方式。

       例子如下:

    

                                      struct X

                                     {

                                          char a;

                                          int b;

                                          double c;

                                      };

                                      struct Y

                                      {

                                           char a;

                                           X b;

                                       };

                  sizeof(X) 为16, sizeof(24).