收藏 分享(赏)

有关sizeof运算符的笔试题目.doc

上传人:gnk289057 文档编号:6214942 上传时间:2019-04-02 格式:DOC 页数:3 大小:23KB
下载 相关 举报
有关sizeof运算符的笔试题目.doc_第1页
第1页 / 共3页
有关sizeof运算符的笔试题目.doc_第2页
第2页 / 共3页
有关sizeof运算符的笔试题目.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、有关 sizeof 运算符的笔试题目#include using namespace std;int main()char *p;char *q20;char *m2020;int (*n)10;struct MyStructchar dda;double dda1;int type;struct MyStruct k;coutsizeof(p)endl;coutsizeof(q)endl;coutsizeof(m)endl;coutsizeof(n)endl;coutsizeof(k)endl;coutsizeof(char)endl;coutsizeof(double)endl;couts

2、izeof(int)endl;coutsizeof(MyStruct)endl;return 0;答案如下:4 指针所占字节为 480 数组长度*指针所占字节=20*4=801600 同上4 指针所占字节为 416 结构类型,与最大长度对齐原则 8+81 字符大小为 18 双精度字节阿大小为 84 整形为 416 结构类型,与最大长度对齐原则 8+8楼主是正确的!32 位机器默认是 4 字节对齐,所以只有 double 才会按 4 字节对齐。对于struct MyStructchar dda;double dda1;int type;dda 是 char,所以占 1 字节;对 double,是

3、 8 字节,此时会按 4 字节对齐,在 dda 后填充3 个字节,就是 1+3+8;而对于 int,按其自身 4 字节对齐,就是 1+3+8+4=16。内存对齐 节约内存许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数 k(通常它为 4 或 8)的倍数,这就是所谓的内存对齐,而这个 k 则被称为该数据类型的对齐模数(alignment modulus)。当一种类型 S 的对齐模数与另一种类型 T的对齐模数的比值是大于 1 的整数,我们就称类型 S 的对齐要求比 T强(严格),而称 T 比 S 弱(宽松)。这种强制的要求一来简化了处理器与内存之间

4、传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个 8 倍数的地址开始,一次读出或写入 8 个字节的数据,假如软件能保证 double 类型的数据都从 8 倍数地址开始,那么读或写一个 double 类型数据就只需要一次内存操作。否则,我们就可能需要两次内存操作才能完成这个动作,因为数据或许恰好横跨在两个符合对齐要求的 8 字节内存块上 三个原则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal ad

5、ding) ;3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)另外还可以用prgam pack(n)来指定偏移量的大小,n 为字节对齐数,其取值为1、 2、 4、8、16,默认是 8,如果这个值比结构体成员的 sizeof 值小,那么该成员的偏移量应该以此值为准,即是说,结构体成员的偏移量应该取二者的最小值。比如: 对 32 位机器,指针大小为 4struct P1 int a; char b; int c; char d; ; /16 struct P2 int a; char b; char c;

6、int d; ; /12struct P3 short a3; char b3; ; /10struct P4 short a3; char *b3; ; /20struct P5 struct P2 *a; char b; struct P1 c2; ; / 40 而:struct P6 int a; int b; char c; char d; ; /12struct P7 int a; char b; char c; int d; ; /12struct P8 short a3; char b3; ; /10struct P9 char *b3; short a3; ; /20struct P10 struct P2 *a;struct P6 c2; char b; ; / 32所以为了节约内存,一个简单的解决方法是:结构体的成员排序应该是从大到小

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初级教育 > 小学教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报