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为准,在不同的平
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库C专家编程看书笔记(5)在线全文阅读。
相关推荐: