内存对齐

首先看一个简单的程序:

#include<stdio.h>

 

void main()

{

   struct inner

   {

       char c1;

       double d;

      // char c2;

   };

   printf("the size of struct inner is :%d\n",sizeof(struct inner));

}

在Ubuntu10.04下用gcc编译输出结果为:the size of struct inner is :12

去掉注释输出结果为:the size of struct inner is  :16

char 类型占一个字节,double类型占8个字节,结果为什么不是9和10呢,原因是在开辟空间时存在内存对齐问题:linux下是以4字节对齐的,第一种情况下c1以4字节对齐,开辟4个字节的空间,d开辟8个字节,所以结果是12;第二种情况下(去掉注释)c1,c2以4字节对齐,分别为其开辟4字节空间,为c1,c2一共开辟8字节就可以了,d同样以4字节对齐,开辟8字节,所以结果就是16。

个人浅见,如有不对地方请高手赐教。

posted on 2010-07-29 19:31  生活费  阅读(222)  评论(0编辑  收藏  举报

导航