- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
PAGE
PAGE #如有帮助欢迎下载支持
内存中结构体的内存对齐
一、 字节对齐作用和原因:
对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特泄 类型的数据只能从某些特左地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的 变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐,其他平台可能没有这种 情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带 来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如 果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开 始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit 数据,显然在读取效率上下降很多。
二、 字节对齐规则:
四个重要的概念:
数据类型自身的对齐值:对于char型的数据,其自身对齐值为1,对于short型为
对于int, float, double类型,其自身对齐值为4个字节。
结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
指定对齐值:^pragma pack (value)时指泄的对齐value。
数据成员、结构体和类的有效对齐值:自身对齐值和指左对齐值中小的那个值。 补充:
.每个成员分别按自己的方式对齐,并能最小化长度。
.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类 型时,可以最小化长度。
.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每 一项都边界对齐。
^pragma pack(l)
struct test
{
static int a; //static var
double m4;
char ml;
int m3;
} #pragma pack 0
//sizeof(test)=13;
Class testl { };
//sizeof(testl)=l;
/*注明:
1、 结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与 结构或者类的实例地址无关;
2、 没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都
有唯一的地址。*/
^pragma pack(l)
struct test
{
static int a; //static var
double m4;
char ml;
int m3;
}
#pragma packO
//sizeof(test)=13;
Class testl{ };
//sizeof(test 1)=1;
/*注明:
1、 结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与 结构或者类的实例地址无关;
2、 没有成员变疑的结构或类的大小为1,因为必须保证结构或类的每一个实例在内存中都 有唯一的地址。*/
示例://分析下而的例子C:
/#指定按2字节对齐*
/#指定按2字节对齐*/
struct C
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
}; PAGE
};
PAGE #如有帮助欢迎下载支持
文档从互联网中收集,已重新修正排版,
文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。
}; PAGE
};
PAGE #如有帮助欢迎下载支持
char b;
int a;
short c;
};
^pragma pack () //恢复对齐状态
/* 第一个变量b的自身对齐值为1,指定对齐值为2,所以,其有效对齐值为1,假设C从0x0000 开始,那么b存放在0x0000,符合0x0000*1 = 0:
第二个变量,自身对齐值为4,指定对齐值为2,所以有效对齐值为2,所以顺序存放在0x0002、 0x0003、0x0004、0x0005四个连续的字节空间中,符合0x000202二(h
第三个变量C的自身对齐值为2,所以有效对齐值为2,顺序在0x0006. 0x0007中,符合
0x0006%2=0.
所以从0x0000到0x0007共八字节存放的是struct C的变虽 又struct C的自身对齐值为
4,所以struct C的有效对齐值为2。
又 8%2=0, struct C 只占用 0x0000 到 0x0007 的八个字节。所以 sizeof (struct 0=8。 如果把上而的^pragma pack(2)改为#pragma pack(4),那么我们可以得
您可能关注的文档
- 2020注册安全工程师安全生产法及相关法律知识考试大纲:第四讲.docx
- 22W43切眼上山安全技术措施1.docx
- 22端翼墙及附属工程作业指导书.docx
- 25第二十五讲陈述句的定义.docx
- 5.制作第一个Flash动画――直线运动的小球.docx
- 7月cma考试注册-预约-查成绩全步骤.docx
- 99级本科下学期试题1.docx
- A06726个人所得税分期缴纳备案表股权奖励.docx
- ACCA考试练习册题目F2XX2.docx
- APP软件方案设计.docx
- 教育公平性对中小学发展的影响分析教学研究课题报告.docx
- 小学道德教育课程的实施效果评估教学研究课题报告.docx
- 小学道德与法治教育有效策略教学研究课题报告.docx
- 小组合作学习在初中课堂的实施教学研究课题报告.docx
- 小学语文学科跨学科融合的实践研究教学研究课题报告.docx
- 小学至高中的信息化教学改革研究教学研究课题报告.docx
- 2024-2025学年高中数学选修4-7人教新课标A版教学设计合集.docx
- 2024-2025学年高中物理必修1人教版教学设计合集.docx
- 2024-2025学年高中物理必修1教科版教学设计合集.docx
- 2024-2025学年初中道德与法治八年级下册统编版(五四学制)(2024)教学设计合集.docx
文档评论(0)