Temet_nosce 2021-08-22 20:36 采纳率: 25%
浏览 50

c语言结构体对齐问题。


struct S3 {
    double d;
    char c;
    int i;

};

struct S4 {

    char c;
    struct S3 s3;
    int f;

};
int main() {
    struct S3 s3;
    struct S4 s4;

    printf("%d\n", sizeof(s4));

    return 0;
}

S4中int f;在下面结果是32,按照理解,第一个char占1个空7个,s3占16个,f占4个?这不是28吗?

  • 写回答

3条回答 默认 最新

  • 全栈极简 博客专家认证 2021-08-22 20:51
    关注

    简单来讲,S3为什么是16呢?最大的是double占8个字节,还有char(1个字节)、int(4个字节),理论应该是13个字节,但分配空间不会这么分配,一定是最大的double所占空间的整数倍。所以8*2=16个字节,发现够用了。

    同理,S4,包含了S3,另外两个char(1个字节)、int(4个字节),理论合起来是size(S3)+5,但实际不会这么分配,一定是较大的空间的整数倍,应该是Size(S3)*2=32,够用了。所以结论是32,就这么简单。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月22日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 Fluent,液体进入旋转区域体积分数不连续