1:什么是结构体对齐

相信很多朋友在计算结构体的时候计算出来的值和实际运算出来的是不一样的就比如这样一个结构体

当我们表面看的时候一眼就认为这是占用了6个字节,可是计算出来的却是12个字节,到这里不少人蒙了。这里我将为大家详细讲解一下结构体在内存中存储的形式。

2:结构体存储的形式

要知道结构体在内存中是怎样存储的首先我们要知道一个概念,那就是内存对齐,那么具体是怎样存储的,我把他分为以下三个点

一:第一个成员在结构体变量偏移为0的地址处

二:其他成员变量要对齐到成员变量的整数倍的地址处

三:结构体总大小为最大对齐数的整数倍数

我们就说第一个成员变量是存储在结构体变量偏移为0的地址处。也就是说我们的第一个成员变量是存放在内存这个位置的

然后我再来看第二个整形成员变量,第二个成员变量讲到的是要对齐到该成员的整数倍的地址处,c是1的整数被一直往下到4的整整数倍的时候也就是在内存中的这个位置

然后我们再来看最后一个成员变量是b,同理b占用一个字节那么他的地址就是在1的倍数处也就是处于这个位置

到了这里我们发现,这所有的数都算出来了也才占用9个字节也不是12个字节。 这里就要讲到我们的最后一条结构体的总大小为最大对齐数的倍数,这里我们知道int类型是最大的类型,那么就要是4的倍数也就是12。

深度了解什么是结构体对齐相关推荐

  1. 深度剖析C语言结构体

    深度剖析C语言结构体 1.什么是结构 2.结构体的声明 3.结构体变量的定义 4.结构成员变量的访问: 5.结构体变量的初始化: 6.嵌套的结构体: 7.结构体数组: 8.typedef 9.结构的自 ...

  2. C语言之结构体以及结构体对齐访问

    1:简单理解,结构体就是数组的进一步发展,数据的优点和缺陷在于数据里面是元素类型必须相同,但是结构体没有这个要求,结构体里面元素的类型可以相同也可以不同. 2:结构体的定义: struct stude ...

  3. 结构体对齐,#pragma pack

    一.结构体对齐 首先通过一个例子说明结构体对齐,可以看到,下面这个结构体占32字节(32位) typedef struct {double d;short s;int i;char c;short s ...

  4. C语言结构体对齐的不足

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105065657 C ...

  5. 这个结构体对齐输出有意思

    这个题目是我在群里看到大家讨论的,既然是讨论的了,那我就拿出来说说,因为笔试面试的时候,可能就会遇到这样的题目. 实例代码 #include "stdio.h" #include ...

  6. C语言结构体对齐[转]

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  7. linux windows 结构体,Linux下C语言——结构体对齐

    结构体对齐的步骤: 1.结构体各成员对齐 2.整个结构体圆整 结构体对齐的特定对齐值: 1.自身对齐值: 自身对齐值就是结构体变量里每个成员的自身大小; 2.指定对齐值: 指定对齐值是由宏#pragm ...

  8. 再看结构体对齐与小端联合问题

    再看结构体对齐与小端联合问题 @(组成原理) 先再次回看一道题目的分析. (2012.15)某计算机存储器按字节编址,采用小端方式存放数据.假定编译器规定int型和short型长度分别为32位和16位 ...

  9. __attribute__((__aligned__(n)))对结构体对齐的影响

    1. __attribute__ 是什么? __attribute__是GCC里的编译参数,用法有很多种,感兴趣可以阅读一下gcc的相关文档.这里说一下__attribute__对变量和结构体对齐的影 ...

最新文章

  1. 目录/文件攻击防范策略研究
  2. 学习鸟哥的Linux私房菜笔记(13)——用户管理
  3. 数据结构Java03【(时间、空间复杂度),排序(冒泡、快速、插入、希尔、选择、归并、基数、队列基数)】
  4. RxJs SwitchMap 学习笔记
  5. 微信小程序下拉刷新列表onPullDownRefresh;微信小程序上划加载列表onReachBottom;uni-app微信小程序下拉加载数据;uni-app微信小程序上划页面加载数据
  6. C语言进行CGI程序设计
  7. gitlab ci 自动化部署_lt;为什么准备使用GitLab做CICD流水线?/gt;
  8. AndroidUI高级之十六使用Intent进行通信
  9. android学习笔记---发送状态栏通知
  10. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
  11. 国人项目上了Github全球热榜,之后都发生了什么?
  12. 求一个任意实数的算术平方根的算法设计_感恩!面试必刷100道算法题
  13. ae去闪插件deflicker使用_Ae/Pr视频去闪烁插件REVisionFX DEFlicker v1.7.1 Win大众脸已注册...
  14. 巴特沃斯低通滤波器 matlab,基于MATLAB做巴特沃斯低通滤波器..doc
  15. 【Python通过分贝监测Windows系统是否有声音播放】
  16. Bitmap对象在内存中的大小和转化为字节流的大小
  17. 申请https域名,证书和部署流程(免费SSL证书)
  18. Java入门 18 3\25
  19. 企业远程高清会议平台视频会议系统在手机端使用的必备要求有哪些?
  20. Qt 桌面悬浮画图软件--电子白板

热门文章

  1. 从书本《皮囊》摘录的几个句子
  2. 渗透测试之内网渗透中的数据传输
  3. Jmeter 随机控制器-随机顺序控制器
  4. 强化学习之马尔可夫决策
  5. 这样运营轮播图可以增加订单
  6. 回答看完《心情随笔》的朋友最关心的问题。
  7. Java Stream 底层原理
  8. docker乞讨之路
  9. mysql编程题 请使用_练习题|MySQL
  10. 【简历投递】数字IC前端设计工程师-北京