您的位置:首页 > 其它

结构体与内存对齐

2014-12-04 12:21 197 查看
1、结构体的声明:

  1)struct Student{

    int stu_id;

    char name[25]

    int age;

    char sex;

   };

  Student student1, student2;

  2)struct Student{

    int stu_id;

    char name[25]

    int age;

    char sex;

   }student1,student2;

  3)struct {

    int stu_id;

    char name[25]

    int age;

    char sex;

   }student1,student2;

  声明一个结构体只是一种结构体类型,它相当于一个模型,但其中并无具体数据,系统也不为之分配实际的内存单元,为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据,即结构体本身不会被作为数据而开辟内存,真正作为数据而在内存中存储的是这种结构体所定义的变量。

2.结构体内存对齐:

  不同编译器,内存会有所不同,在存储结构体时会按照内存对齐进行处理,本文只考虑win32下情况,下表是不同数据类型在内存中所占的大小。

charshortintfloatlongdoublelong longlong double
长度12444888
  例1:没有挤占,int型所占空间最大,以int型对齐,即整体空间为4的位数。

  struct Student{

    int stu_id; //占4位

    char name[25] ; //字符数组为25位,对齐应该补3位

    int age; //占4位

    char sex; //占1位,对齐应该补3位

   };

  实际占内存大小为:40。

  例2:内部挤占,以int型空间对齐,即整体空间为4的位数。

  struct Student{

    int stu_id; //占4位

    char name[25] ; //字符数组为25位,取4的倍数,因此为占28位

    char sex; //向上挤占,因此占0位

    int age; //占4位

   };

  实际占内存大小为:36。

  例3:内部挤占,以double型空间对齐,即整体空间为8的位数。

  struct Student{

    int stu_id; //int为4位,补4位

    char name[25] ; //字符数组为25位,补7位,占32位

    char sex; //char为1位,向上挤占,因此占0位

    double age; //占8位

   };

  实际占内存大小为:48。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: