首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充在结构中是如何工作的?

问填充在结构中是如何工作的?
EN

Stack Overflow用户
提问于 2012-05-25 02:54:13
回答 5查看 689关注 0票数 4

这个程序的输出是28。我不明白怎么回事?根据我的说法,这应该是32(4+4+4+4+12)+4(以保持对齐)=32。请解释显示输出28的原因??

代码语言:javascript
复制
struct test{
    char c;
    int d;
    int x;
    int y;
    long double p;
    }t1;

printf("%d",sizeof(t1));
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-25 02:57:50

也许您的“长双精度”实际上与双精度(8字节)相同,如果您在32位处理器上,对齐方式是4字节。

4+4+4+4+8 = 24

什么是sizeof(long double)

编辑:

我用了GCC的__builtin_offset_of()和__alignof__进行了调查。解释结构大小的实际答案是:

4+4+4+4+12 = 28

sizeof(long double)是12岁。

不需要填充,因为__alignof__(long double)是4和。有趣的是,__alignof__(double)是8。

票数 5
EN

Stack Overflow用户

发布于 2012-05-25 03:44:39

在64位系统上,大小为char -1字节(不是4字节) int -4字节长double - 12字节

所以总数是1+4+4+4+12+padding = 28个字节!!

票数 1
EN

Stack Overflow用户

发布于 2012-05-25 04:01:58

根据this的说法,在gcc 32位模式(使用gcc -m32或使用为生成32位输出而构建的gcc,无论您的平台实际上是什么)中,长双精度仅是4字节对齐。不过,最好参考一下gcc的手册来验证这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10743619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档