首页 > 代码库 > C语言中内存对齐
C语言中内存对齐
今天一考研同学问我一个问题,一个结构体有一个int类型成员和一个char类型成员,问我这个结构体类型占多少个字节,我直接编个程序给他看结果。这个结构体占八个字节,咦,当时我蛮纳闷的,一个int类型四个字节,一个char类型一个字节,怎么这个结构体的大小不是五个字节呢??上网查了一下,结果发现还有个内存对齐的问题。
为了方便操作系统访问内存,一次访问四个字节,为了避免一个变量的二次访问,通常设置采用内存对齐。
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 }
执行结果为:
如果把结构体添加一个char成员,添加位置不同,结构体的大小也会不同
1 typedef struct2 {3 int a;4 char b;5 int c;6 char d;7 }list;
这个结构体将占16个字节
1 typedef struct2 {3 int a;4 char b;5 char d;6 int c;7 }list;
而这个结构体则占用12个字节。
所以理解了内存对齐,有助于我们知道一个结构体所占用空间的大小,也会有助于我们在编程中节省空间。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。