码迷,mamicode.com
首页 > 编程语言 > 详细

C语言中内存对齐

时间:2014-07-20 22:24:41      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   2014   io   

          今天一考研同学问我一个问题,一个结构体有一个int类型成员和一个char类型成员,问我这个结构体类型占多少个字节,我直接编个程序给他看结果。这个结构体占八个字节,咦,当时我蛮纳闷的,一个int类型四个字节,一个char类型一个字节,怎么这个结构体的大小不是五个字节呢??上网查了一下,结果发现还有个内存对齐的问题。

         为了方便操作系统访问内存,一次访问四个字节,为了避免一个变量的二次访问,通常设置采用内存对齐。

bubuko.com,布布扣

 1 #include<stdio.h>
 2 
 3 typedef struct
 4 {
 5     int a;
 6     char b;
 7     int c;
 8 }list;
 9 
10 int main(int argc, const char *argv[])
11 {
12     list l;
13     printf("sizeof(l) = %d\n",sizeof(l));
14     printf("a = %x b = %x c = %x\n",&l.a,&l.b,&l.c);
15     return 0;
16 }

执行结果为:bubuko.com,布布扣

 

如果把结构体添加一个char成员,添加位置不同,结构体的大小也会不同

1 typedef struct
2 {
3     int a;
4     char b;
5     int c;
6     char d;
7 }list;

这个结构体将占16个字节

1 typedef struct
2 {
3     int a;
4     char b;
5     char d;
6     int c;
7 }list;

而这个结构体则占用12个字节。

所以理解了内存对齐,有助于我们知道一个结构体所占用空间的大小,也会有助于我们在编程中节省空间。

C语言中内存对齐,布布扣,bubuko.com

C语言中内存对齐

标签:style   blog   http   color   2014   io   

原文地址:http://www.cnblogs.com/lighthjj/p/3857250.html

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