开发者社区> 问答> 正文

visual c++6.0 结构体占存字节的疑问

程序1:
#include
int 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:
#include
int 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个字节 ?

展开
收起
a123456678 2016-03-19 14:18:47 2191 0
1 条回答
写回答
取消 提交回答
  • 嗨,
    这两个问题应该属于内存对齐问题,这里是结构体对齐。

    第二个问题中,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));

    希望能帮到你

    2019-07-17 19:08:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载