C专家编程看书笔记(5)

2021-01-20 22:13

C专家编程学习中的笔记

}c;
&char = 134518468,&double = 134518472,&short = 134518480,&char = 134518482,&short = 134518484,&char = 134518486.sizeof(c) = 20.注意如果按以前我的认为,这里将会是16。
struct node_tag10{
char test0;
double test1;
short test2;
char test3;
short test4;
char test5;
char test6;
}c;
&char = 134518480,&double = 134518484,&short = 134518492,&char = 134518494,&short = 134518496,&char = 134518498,&char = 134518499.sizeof(c) = 20.注意如果按以前我的认为,这里将会是16。
struct node_tag10{
char test0;
short test1;
double test2;
short test3;
char test4;
short test5;
char test6;
char test7;
}c;
&char = 134518508,&short = 134518510,&double = 134518512,&short = 134518520,&char = 134518522,&short = 134518524,&char = 134518526,&char = 134518527.sizeof(c) = 20.
struct node_tag10{
short test0;
double test1;
short test2;
char test3;
short test4;
char test5;
char test6;
}c;
&short = 134518480,&double = 134518484,&short = 134518492,&char = 134518494,&short = 134518496,&char = 134518498,&char = 13451899.sizeof(c) = 20.
由上面这些可得,第一个分配地址总是能被4整除的,32位机,便于寻址。后面出现的类型(如int,double等)只要所占字节数大于或等于4个字节,也将会从能被4整除的地址开始,且与前面地址是连续的。下面这个能很好说明:
struct node_tag10{
char test0;
double test1;
short test2;
char test3;
short test4;
char test5;
}c;
&char = 134518468,&double = 134518472,&short = 134518480,&char = 134518482,&short = 134518484,&char = 134518486.sizeof(c) = 20.注意如果按以前我的认为,这里将会是16。
最后还是做一下Visual C++6.0上的测试:
sizechar = 1;sizeshort = 2;sizeint = 4;sizelong = 4;sizefloat = 4;sizedouble = 8;sizelongdouble = 8.
struct node_tag10{
short test0;
double test1;
short test2;
char test3;
short test4;
char test5;
char test6;
}c;
&short = 4339136,&double = 4339144,&short = 4339152,&char = 4339154,&short = 4339156,&char = 4339158,&char = 4339159.sizeof(c) = 24.与虚拟机上不同,无论第一个类型变成char,short,int,double都会占8个字节,除非一个也不要,就不会占8个字节。
将double改成int,前面第一个类型(char,short)会只占4个字节了。若改为short,前面的char又只占两上字节了,这,总之一句话,程序里面太多的神奇。
**********************************************************************************************************************************************************************
下午又得
出一点结论:
编译器存在字对齐问题,将以结构体中占字节最多的类型来对齐。(不同的平台,会有区别,就如是我的虚拟机(有double存在也会像样int以4个字节做为分配单无)与VC++6.0(有double存在将会以8个字节做为分配单元)结果不一样,这里我们以VC++6.0为准,在不同的平


C专家编程看书笔记(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012届高三文科数学第二轮专题复习-------三角函数(含答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: