- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言中级 2.数据类型
* 对于VC++(32)平台,结构体变量对于内存的占用以及发生原因。(与TC的区别) 看后页例: struct S { char a; int b; double c; } sa; 其中sizeof(char) =1; sizeof(int) = 4; sizeof(double) = 8; 所以sizeof(sa)应该等于1+4+8=13才对。那只是人们的一厢情愿,其实不然。会等于16。 * 32位的CPU读内存时,一次读取四字节的内容,因为字长是32位的,并且读取的地址是被4整除的!即0,1,2,3这样的连续的地址,而不是2,3,4,5这样的地址! #pragma pack () 其实一点也不怪,C/C++是按pack算法的对齐基数来决定结构体大小的。 若有 struct A { long l; int i; short s; char c; }; 若按基数为1字节计,该结构体的大小为15;按2字节计,大小为16;按8字节计,大小为32。 而基数是按字长的整数倍来确定的(为了效率),并且各编译器各有自己的原则,甚至有的编译器还可以用选项指定倍数。 * 32位的CPU读内存时,一次读取四字节的内容,因为字长是32位的,并且读取的地址是被4整除的!即0,1,2,3这样的连续的地址,而不是2,3,4,5这样的地址! #pragma pack () 其实一点也不怪,C/C++是按pack算法的对齐基数来决定结构体大小的。 若有 struct A { long l; int i; short s; char c; }; 若按基数为1字节计,该结构体的大小为15;按2字节计,大小为16;按8字节计,大小为32。 而基数是按字长的整数倍来确定的(为了效率),并且各编译器各有自己的原则,甚至有的编译器还可以用选项指定倍数。 * 结构体每个成员的变量的首地址能够被该成员大小与对齐基数中的较小者所整除; * 因为有些操作系统不自动对齐。需要我们手动添加填充字节! //#pragma pack(push) //#pragma pack(1) struct A { char c1; int a; float f; char c2; }; //#pragma pack(pop) * sizeof(sa)=8 。 sb中的int a 占4个字节,紧接着的char b占1个字节,但char b随后的double c需要占用8个字节,所以char b和double c不能挤在4个字节里。于是在char b和double c间填了3个字节的空位,实现了数据对齐。这样就不难理解为什么sizeof(sb)=16了。 我们试图按同样的思路理解sc又会出问题:sizeof(sc)似乎等于4+8+4=16才对,可是输出的结果却是sizeof(sc)=24。 看来刚才的“猜想”是有问题的。问题出在哪儿呢?为什么分析sa和sb都没有问题,到sc就出现问题了呢?sb和sc的唯一区别就是char b和double c的定义次序颠倒了,这使得sb的a和b可以共居于一个对齐单位8,而sc的a和b则要各占一个对齐单位8。 * sizeof(A) = 16; sizeof(struct B) = 32 * 聪明的编译器可能会注意到你两次使用x,而没有改它的值,它将把x临时存储在一个寄存器中,接着在需要的时候,可以通过从寄存器而非初始的内存位置中读取该值,以节省时间。这个过程被称为缓存,但如果在两个语句间其他代理改变了x的话就不是这样了,如果没有规定volatile关键字,编译器将无从得知这种改变是否可能发生,因此,为安全起见编译器不使用缓存,现在,如果声明中没有使用关键字volatile,编译器就可以假定一个值在使用过程中没有被修改,它就可以试着优化代码。 * * * * * 2.1 数据类型的意义 多字节的数据在内存中如何存放 78 56 34 12 12 34 56 78 高地址 高地址 低地址 低地址 int b = 0; 2.1 数据类型的意义 数据对齐的端模式(Endian) 与处理器有关,分为两种: 1. 小端对齐,将低位存放在低地址。 如Intel 80X86系列。 2. 大端对齐,将高位存放在低地址。 如PowerPC处理器。 例如,对于一个32位的数 0小端对齐: 78 56
您可能关注的文档
- 数学:1.1《命题及其关系》课件1(新人教A版选修2-1).ppt
- c语言周彩英04函数.ppt
- A2029=高一数学(3.3.2两点间的距离).ppt
- C-ProC语言指针与内存控制原理.ppt
- 生存交际第3级第1单元.ppt
- 探究a与力、质量的关系和牛顿第二定律.ppt
- 第8章 函数(变量作用域及生存期).ppt
- 高中数学必修4优秀课件:1.2.2--同角三角函数的基本关系(人教A版必修4).ppt
- 大学C语言课程全部PPT汇总-第九章.ppt
- 现代生物进化理论主要内容20101119092045434.ppt
- [专精特新]浙江中达精密部件股份有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]淄博纽氏达特行星减速机有限公司行业竞争力评级分析报告(2023版).pdf
- 重庆霏洋环保科技股份有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]苏州安特威工业智能科技股份有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]星泓智造装备有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]美新科技股份有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]珠海金鸡化工有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]江西荣晖电子有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]重庆利财管道有限公司行业竞争力评级分析报告(2023版).pdf
- [专精特新]新安天玉有机硅有限公司行业竞争力评级分析报告(2023版).pdf
最近下载
- 数学学科课和数学活动课.docx
- 推台锯操作规程.pdf VIP
- Unit1Music测试卷2024-2025学年沪教版(五四制)七年级英语下册.docx VIP
- DB51∕T 940-2009 草原有害生物防治农药安全使用规范.pdf
- 医疗器械注册质量管理体系核查指南.pdf
- 江苏省南京市第二十九学校2023-2024学年九年级下学期第一次月考英语试题和答案详解.pdf
- 二年级上册语文素材指鹿为马人教部编版.ppt
- 2024年宁夏银川市单招职业倾向性测试题库及答案(全优).docx VIP
- 第五课 为什么我一个人站着吃.pptx VIP
- 17J925-1_压型金属板建筑构造.docx VIP
文档评论(0)