请教有关结构体所占字节数的问题。
最近碰到这么一个问题,查询了一下资料,得知:32位和64的环境下数据类型所占字节数不相同,所以这里我们仅讨论64位的情况。进入正题:
程序代码:
#include<stdio.h> struct { int a[1]; float b; double c; }std; int main() { printf("%d",sizeof(std)); return 0; }
编写了一段简单的测试代码,得出结果:
为了进一步测试,所以更改结构体std的成员变量数组a[1]为a[2],如下
int a[2];
得出结果:
再次修改,将 int a[2] 改成 int a[3],得出结果:
多次修改,将int a[3] 改成 int a[4],得出结果:
最后得出测试结果,已知,64位环境下,float 占用4字节,double占用8字节,
所以:
当int a[1]时,得出结果:4字节+4字节+8字节=16字节
当int a[2]时,得出结果:4字节*?+4字节+8字节=24字节
当int a[3]时,得出结果:4字节*?+4字节+8字节=24字节
当int a[4]时,得出结果:4字节*?+4字节+8字节=32字节
当int a[5]时,得出结果:4字节*?+4字节+8字节=32字节
当int a[6]时,得出结果:4字节*?+4字节+8字节=40字节
当int a[7]时,得出结果:4字节*?+4字节+8字节=40字节
以此类推,从int a[2]开始,每加两个数组下标每增加2(等同于每增加两个数组元素),字节增加8。
疑惑:为什么数组在增加一个数组元素时,就已经多占用了8字节呢,虽然再增加一个数组元素时,所占字节数不变。请问究竟是该如何计算呢?
[此贴子已经被作者于2019-4-11 01:31编辑过]