C语言中关于字对齐的问题
2013-06-25 17:27
288 查看
在C语言中,有关存储的问题会设计到一些对齐概念的理解,我们知道,为了能使CPU对变量进行高效快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”。例如对于4字节的int类型变量,其起始地址应位于4字节边界上,即起始地址能够被4整除。变量的对齐规则如下(32位系统):char 在字节边界上对齐short (16-bit) 在双字节边界上对齐int and long (32-bit) 在4字节边界上对齐float 在4字节边界上对齐double 在8字节边界上对齐这里纯粹是为了计算机存储方便设计的,在设计到对齐概念时,只需要理解存储单元的首地址必须能够和该存储类型变量的对齐方式整除,例如: 存储int型,sizeof(int)=4.,所以地址必须要能够被4整除,这个问题在结构体占用存储单元大小计算的时候会用到:比如:
阅读(665) | 评论(0) | 转发(0) |0上一篇:黑客帝国 数字雨 屏幕保护程序 linux ubuntu下一篇:转--uc/OS 任务调度机制相关热门文章神经性皮炎 麻将邮政快递代收货款 邮票...武汉扑克透视眼镜 麻将技巧...www.fenghuangyulepingtai.com...win7和centos双系统时间不一致...test123编写安全代码——小心有符号数...使用openssl api进行加密解密...一段自己打印自己的c程序...sql relay的c++接口GCC编译命令推荐系统常用算法C++Primer笔记 第八章 标准IO...c语言中的#号和##号的作用...gstreamer插件开发-------sink...给主人留下些什么吧!~~评论热议
struct { int a; char b; int c; }test; sizeof(test)=? 结果是12,这就是对齐的概念, 再看下边几个: |
struct{char a;int c;float d;char e;double f;}test;sizeof(test)=? 结果是24, 这里需要注意的一个问题是: 对于double型的数据也是字对齐,可以这么理解虽然double占用2个字(dw),即8个字节(byte),但它的对齐方式仍然是字对齐,只是在存储空间上需要占用8个字节的空间, 也可以这么理解,在对齐方式中,只有字节对齐、半字对齐、字对齐三种方式,double属于字对齐,float、int也属于字对齐。 |
相关文章推荐
- 关于C语言中的结构体对齐问题
- 关于包含0长数组的结构体对齐问题(C语言 Linux_x64 GNU编译器)
- 关于C语言中的结构体对齐问题
- 关于C语言struct对齐的问题
- 关于c语言中的字节对齐padding问题
- 关于C语言中结构体字节对齐问题
- 关于C语言中的结构体对齐问题
- [memory]C语言关于字节对齐的问题
- C语言中sizeof用法中关于边界对齐的问题
- 关于C语言中数据结构的内存对齐问题
- 关于C语言中的结构体对齐问题
- 关于C语言 内存对齐的问题
- 关于C语言结构体对齐问题的探讨
- 关于C语言中的结构体对齐问题
- 关于C语言 内存对齐的问题
- 关于C语言中内存的3个问题
- [转]关于结构体成员内存对齐的问题
- C语言中的一个关于基本类型的输出问题
- 关于C语言的一些容易搞混的问题
- 关于iOS中设置UIButton的标题(含图)左右对齐的问题