关于内存字节对齐的例子
来源:互联网 发布:淘宝微信商城开发 编辑:程序博客网 时间:2024/05/17 05:02
今天遇到一个问题,自写了一个结构体,调试后发现结构体字节数跟每个成员的字节数和不等,代码如下:
#include <stdio.h>struct ether_header{unsigned charether_dhost[6];// 以太网目的地址--占1*6个字节 unsigned charether_shost[6];// 源以太网地址--占1*6个字节 unsigned charether_headlen ;//包头长--占1个字节unsigned intether_pktNO ;//数据包编号--占4个字节unsigned shortether_datalen;// 数据包长--占2个字节 };int main(){printf("%d\n", sizeof(struct ether_header)); //运行后打印出24return 0;}打印后的结果与各成员的字节数19不等,而实际struct ether_header占24个字节;经过分析后得知内存是按四字节对齐的,故为24。
结论:内存是按照一定的字节数对齐的。
补充三条:
1:数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始)存储。
2:结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char、int 、double等元素,那b应该从8的整数倍开始存储。)
3:收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
更多参看:《内存分配的字节对齐》
- 关于内存字节对齐的例子
- 关于字节内存对齐
- 关于内存字节对齐
- 关于 Struct 内存对齐的几个例子
- 关于C++内存中字节对齐问题的详细介绍
- 关于C++内存中字节对齐问题的详细介绍
- 关于C++内存中字节对齐问题的详细介绍
- 内存分配的字节对齐
- C++ 内存的字节对齐
- 关于VC的字节对齐
- 关于字节对齐的总结
- 关于字节对齐的林林总总
- 关于字节对齐的总结
- 关于字节对齐的讨论
- 关于C的字节对齐
- 关于arm 的字节对齐
- 关于字节对齐的总结
- 关于字节对齐的理解
- 我为什么回家:一位程序员老爸的宣言
- android模拟器无法使用camera拍照
- MyEclipse 格式设置
- 重装系统后 mysql里的数据恢复办法 can't connect to MYSQL server on 'localhost'(10061)
- 二进制的KMP
- 关于内存字节对齐的例子
- 初学linux
- 数组Array工具类
- java 利用Array类进行数组的复制
- 4.2 实验练习
- Securecrt 在win7下 字体太少问题
- C/C++调用lua脚本函数
- UpdatePanel 加载后 调用Js脚本
- 关于firefox安全限制剪贴板操作的解决方法