码迷,mamicode.com
首页 > 其他好文 > 详细

结构体声明与内存对齐

时间:2014-12-04 13:36:00      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:style   ar   color   使用   sp   on   数据   bs   size   

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下情况,下表是不同数据类型在内存中所占的大小。

  char short int float long double long long long double
长度 1 2 4 4 4 8 8 8

 

  例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。

 

结构体声明与内存对齐

标签:style   ar   color   使用   sp   on   数据   bs   size   

原文地址:http://www.cnblogs.com/xp12/p/4142550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!