首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有工会的结构尺寸

有工会的结构尺寸
EN

Stack Overflow用户
提问于 2013-12-12 03:12:19
回答 1查看 3.2K关注 0票数 2

我对“数据对齐”这件事非常困惑:

代码语言:javascript
运行
复制
#include <stdio.h>
int main(){
    struct st{
        int i,*p;
        char c;
        union { char type[4]; unsigned char d;} un; 
    };

    struct st s1={25,&a,'X',"asdf"};
    printf("sizeof s1 is %d",sizeof(s1));
    return 0;
}

由于数据对齐,我认为由于

代码语言:javascript
运行
复制
int i : 4 bytes
int *p : 8 bytes
char c : 1 byte(+3)
union : 4 bytes

输出为20,但这将输出sizeof s1 is 24!为什么它输出24?这是否考虑到int *p,即8字节?

EN

回答 1

Stack Overflow用户

发布于 2013-12-12 03:18:38

在您使用的体系结构中,int *p是8字节,但也需要在8字节的边界上。这在ip之间提供了4个字节的衬垫。此外,由于int *p需要位于8字节的边界上,所以总体结构需要是8字节的倍数,这样它们的数组总是对p有正确的对齐。

所以,你最终得到了这样的布局:

  • i:4字节,对齐4
  • pad: 4字节
  • p:8字节,对齐8字节
  • c:1字节
  • un:4个字节(因为它可以保持字节对齐)
  • pad: 3字节(将其舍入到8字节的边界)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20534343

复制
相关文章

相似问题

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