博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中内存对齐
阅读量:5033 次
发布时间:2019-06-12

本文共 814 字,大约阅读时间需要 2 分钟。

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

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

1 #include
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个字节。

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

转载于:https://www.cnblogs.com/lighthjj/p/3857250.html

你可能感兴趣的文章
如何判断链表是否有环
查看>>
ssh无密码登陆屌丝指南
查看>>
MySQL锁之三:MySQL的共享锁与排它锁编码演示
查看>>
docker常用命令详解
查看>>
jQuery技巧大放送
查看>>
字符串转换成JSON的三种方式
查看>>
clojure-emacs-autocomplete
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
10 华电内部文档搜索系统 search03
查看>>
[HDU1402]A * B Problem Plus(FFT)
查看>>
[CF803C] Maximal GCD(gcd,贪心,构造)
查看>>
逆时针旋转的矩阵变换
查看>>
第10周15/16/17
查看>>
四六级作文常见错误解析(转载)
查看>>
Tomcat
查看>>
./是当前目录 ../是当前的上一级目录。上上级就是../../一般绝对路径时候常用...
查看>>
树的递归与非递归遍历方法
查看>>
oracle连接的三个配置文件(转)
查看>>
PHP表单(get,post)提交方式
查看>>
Silverlight入门
查看>>