根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。
结构的大小 (前一部分可获得,后一部分应嵌入 该结构的解释不详细,可以使用 供参考) 运算符sizeof可以计算给定类型的大小. 对于32位系统, sizeof(char)= 1; sizeof(int)= 4. 基本数据类型的大小易于计算,让我们看一下如何计算结构化数据类型的大小. C语言中有三种类型的结构数据: 数组,结构和联合. 数组是相同类型元素的集合. 只要计算出单个元素的大小,整个数组所占用的空间就等于基数 将基本元素的大小乘以元素数. 结构中的成员可以是不同的数据类型,并且成员按照定义的顺序存储在连续的内存中 空格. 与数组不同,结构的大小不仅仅是所有成员大小的总和. 需要考虑的是系统在 存储结构变量时的地址对齐问题. 看一下这样的结构: struct stu1 { int i; 字符c; int j; }; 首先介绍一个相关的概念偏移. 偏移量是指结构变量中成员的地址和结构更改 测量地址差. 结构的大小等于最后一个成员的偏移量加上最后一个成员的大小. 显然sizeof计算结构体大小,结构 body变量中第一个成员的地址是结构变量的第一个地址. 因此,第一个成员i的偏移量为0. 第二个成员c的偏移量是第一个成员的偏移量加上第一个成员的大小(0 + 4),其值为4;第一个 三个成员j的偏移量是第二个成员的偏移量加上第二个成员的大小(4 + 1),其值为5. 实际上,由于存储变量时地址对齐的要求,编译器在编译程序时将遵循两个原则: 1. 成员在结构变量中的偏移量必须是成员大小的整数倍(0被视为任何数字的整数倍) 2. 结构的大小必须是所有成员大小的整数倍. 与第一个成员相比,上例中前两个成员的偏移量满足要求,但第三个成员的偏移量为 5,不是其自身大小(int)的整数倍. 处理时,编译器将在第二个成员之后添加3个空字节, 使第三个成员的偏移量为8. 与第二个相比,该结构的大小等于最后一个成员的偏移量加上其大小,该大小在上例中计算得出 随附的大小为12,符合要求. 看一下满足第一项但不满足第二项的情况 struct stu2 { int k; 短t; }; 成员k的偏移量为0;成员t的偏移为4,因此不需要进行任何调整. 但是计算出的大小为6,显示为 但是,它不是成员k大小的整数倍. 因此,编译器将在成员t之后添加2个字节,以使结构更大 小的变成8,以满足第二个要求. 可以看出,定义结构类型时需要考虑字节对齐,不同的顺序会影响 结构的大小. 比较以下两个定义序列 struct stu3 struct stu4 {{ char c1;字符c1; int i;字符c2; char c2; int i; }} 尽管结构stu3和stu4的成员相同,但是sizeof(struct stu3)的值为12,sizeof(structstu4)的值 的值 是8. 如何计算结构中的成员是否为另一种结构类型?看下面的例子, 结构体温度 { char a [5]; 结构 { int w; 双e; int h; } ss; double d; } tem; 只需扩展结构即可. 但是要注意的是,扩展结构的第一个成员(int w) 的偏移量 应该是要扩展的结构(ss所属的结构)中最大成员(双e)的整数倍. 解决方案如下: 第一个成员a [5]的偏移量为0. 第二个成员w的偏移量为第一个成员的偏移量加上第一个成员的偏移量 成员的大小(0 + 5),其值为5,不是(double e)大小的整数倍. 处理时,编译器将排在第三位 在 之后添加3个空字节 成员,以使第三成员的偏移变为8. 第三成员e的偏移为第二 该成员的偏移量加上第二个成员的大小(8 + 4),该值为12. 第四个成员h的偏移量是第三个成员 成员的偏移量加上第三个成员的大小(12 + 8),值为20. 第五个成员d的偏移量是第一个成员 四个成员的偏移量加上第四个成员的大小(20 + 8),其值为28,而不是其自身大小(双倍d) 的整数倍 . 处理时,编译器将在第二个成员之后添加4个空字节,以便第三个成员的偏移量 成为32. 结构的大小等于最后一个成员的偏移量加上它的大小,在上面的示例中更大 小为40,符合要求. 此时,请注意,尽管char a [5]是5个字符的类型,但结构的大小是在末尾计算的. 计算1,即最终结构的大小可以被1整除,然后传递. (紫色部分是我自己的摘要). 请注意,在Linux下sizeof计算结构体大小,整个结构的大小应为: Char对齐模数为1,短为2,int为4,浮点数为4,两倍(Linux为4,windows为8) 因此,对于以下结构: (32位计算机,默认设置) 结构体温度 { int i; double j; }; 在WINDOWNS系统下,整个结构的大小应为16,在LINUX系统下,整个结构的大小 大小应为12
|
温馨提示:喜欢本站的话,请收藏一下本站!