问题描述
- visual c++6.0 结构体占存字节的疑问
-
程序1:
#includeint main(void)
{
struct stu
{
double a;
int b;
}tex;printf("%d %d %d n", sizeof(stu), sizeof(tex.a), sizeof(tex.b) ); return 0;
}
结果:16 8 4 //疑问:为什么 sizeof(stu) 不等于 sizeof(tex.a)和 sizeof(tex.b) 的和 12 , 而相差了4个字节?
程序2:
#includeint main(void)
{
struct stu
{
char c;
int b;
} tex;printf("%d %d %d n", sizeof(stu), sizeof(tex.a), sizeof(tex.c) ); return 0;
}
结果:8 1 4 //疑问:相差3个字节 ?
解决方案
楼主补充:头文件 添加了 stdio.h 这里没有显示出来
解决方案二:
嗨,
这两个问题应该属于内存对齐问题,这里是结构体对齐。
第二个问题中,char c占用1个字节,int b占用4个字节,int b要求4字节对齐,所以结构体变量实际占用的空间为1(c)+3(用于对齐访问)+4(b);
第一个问题有点复杂,根据上面的分析,double应该占用8个字节,int占4个字节,应该占用12字节;但是结构体对齐中还有一点是:结构体会按照内长度最大(这里是double)成员大小对齐,所以结构体实际占用空间为8+4+4(用于结构体8字节对齐);
PS:这些规则还与编译器编译规则有关,比如gcc中的#pragma pack(n)或__attribute__((packed));
希望能帮到你
时间: 2024-11-02 20:53:58