weixin_48116645 2022-02-13 18:05 采纳率: 100%
浏览 45
已结题

结构体对齐问题,希望大家帮助

img


为什么s1和s2的大小是8字节,s3的大小是12字节
按4字节对齐,一个char 一个short 一个char不是刚好4字节吗?为什么又要申请4字节?

  • 写回答

6条回答 默认 最新

  • 关注

    对于你这个问题可以参考如下链接:


    原则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址开始,每一个元素放置到内存中时,它都会认为内存是以它自己的大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。

    原则二:在经过第一原则分析后,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。
    s3的大小是12字节
    int i1占第1-4字节
    char c2占第5字节
    short s1占第7-8字节 (short以2个字节为单位进行存储,由于第5字节已有数据,因此它会存入下一个2字节模块,也就是存入到7~8字节)
    char c2占第9字节
    最宽的int的长度是4 补齐为4的整倍数就是12字节

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败