结构体是C语言的一大特色,今天就来思考两个问题。

  1. 它的成员的顺序排列有什么要求吗?

原则一:结构的首变量地址偏移量offset为0,之后每个变量的首地址都要是其本身宽度的整数倍。总size=(0+1)+(3+4)+(0+8)=16。

原则二:结构体的大小一定是最大成员宽度的整数倍,依照原则1,总size=8+4+1=13;因为原则二,所以要在char后补齐3位,总size=16。

  2.为什么要设计内存对齐这种方式?

当cpu需要取4个连续的字节时,若内存起始位置的地址可以被4整除,那么我们称其对齐访问,首先很多CPU并不支持非对齐的内存访问,比如我们使用的stm32(有些x86结构的复杂指令集CPU,可以非对齐内存访问,他采取多次读取对齐的内存,然后拼接数据来实现;但这样会增加数据访问的时间,和电路设计的复杂性);硬件电路为何会更复杂这个问题,先不深入讨论。所以内存对齐明白会提高CPU的访问速度就 OK了。

转载于:https://www.cnblogs.com/lzd626/p/9459125.html

结构体内存对齐的原则及原理相关推荐

  1. 【APUE】Chapter17 Advanced IPC sign extension 结构体内存对齐

    17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊s ...

  2. c语言 char转int_图文并茂,一文讲透C语言结构体内存对齐

    ↑点击上方蓝色字体,关注"嵌入式软件实战派"获得更多精品干货. (以下有约5000字内容,建议收藏再读,推荐下载源码自行测试以加深理解.) 面试官:你知道C语言的结构体对齐吗? 应 ...

  3. printf打印结构体_工程师:这道题80%初学者都没做对!你确定搞懂结构体内存对齐了?...

    这是工程师面试后的实际经历-- 这道经典.易错的关于C语言结构体内存对齐的题目,你真的会吗: 求32bit环境下以下结构体所占的字节数:typedef struct test_struct{ char ...

  4. struct结构体内存对齐解析

    为什么要内存对齐 虽然所有的变量最后都会保存到特定的地址内存中去,但是相应的内存空间必须满足内存对齐的要求,主要基于存在以下两个原因: 硬件平台原因: 并不是所有的平台都能够访问任意地址上的任意数据, ...

  5. 【C语言】一文搞定如何计算结构体的大小----结构体内存对齐规则

    要搞定如何正确地计算一个结构体的大小,我们就要深刻理解结构体内存对齐规则: 结构体内存对齐规则: 1.结构体的第一个成员永远在结构体起始位置偏移量为0的位置: 2.结构体成员从第二个成员开始,总是放在 ...

  6. 关于C语言中的结构体内存对齐与位段问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 结构体的内存对齐与位段 一.结构体的内存对齐 1.为什么会有内存对齐? 2.如何内存对齐 3. 如何在设计结构体的时候,既要 ...

  7. 语言结构体在内存的分布_结构体内存对齐,这篇文章给你彻底搞会!(干货收藏)...

    脚本之家 你与百万开发者在一起 公众号:C语言编程 作者:薛定谔的coding猫 一.内存对齐的原因  1.平台原因(移植原因):一些资料上是这样说的,"不是所有的硬件平台都能访问任意地址上 ...

  8. c#往结构体里面读数据_结构体内存对齐,这回给你彻底搞会!

    一.内存对齐的原因  1.平台原因(移植原因):一些资料上是这样说的,"不是所有的硬件平台都能访问任意地址上的任意数据:某些硬件平台只能在某些特定地址处取某些特定的数据,否则就会抛出硬件异常 ...

  9. C语言结构体内存对齐问题

    参考博文:C语言结构体内存对齐问题 成员对齐:   以4字节对齐为例,如果自身类型小于4字节,则该成员的首地址是自身类型大小的整数倍:如果自身类型大于等于4字节,则该成员的首地址是4的整数倍.若内嵌结 ...

  10. 室友利用一把王者的时间就学会了【C语言结构体内存对齐】

    文章目录 一.什么是结构体内存对齐? 二.结构体的对齐规则 结构体内存对齐规则的具体应用 三.为什么会存在内存对齐 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.什么是结构体内存对齐? 从 ...

最新文章

  1. Spring Boot 特性 —— SpringApplication
  2. iOS Hardware Guide
  3. 《大话移动 APP 测试》
  4. pyspark.zip/pyspark/worker.py:53: UnicodeWarning: Unicode equal comparison failed to convert both ar
  5. outlook2016投票_投票:2016年读者选择奖和最佳采访奖
  6. CODE[VS]1012 最大公约数和最小公倍数问题
  7. office选项-》高级-》显示 中, 显示此数目的“最近使用的文档” 为灰色,无法更改
  8. Spider局域网通讯软件
  9. Linux 之 利用Google Authenticator实现用户双因素认证
  10. Java多线程看着一篇足够了!
  11. Hibernate jar问题
  12. win7下Visual Studio 2012 update4、AutoCAD 2016和二次开发插件ObjectARX2016环境安装及配置
  13. AWSS3文件断点下载,分片上传,断点续传
  14. Autodesk 3ds Max 渲染之后保存页面卡死问题
  15. (基础)单个字符的大小写转换
  16. win2008 有几个版本?区别是什么?
  17. python检测多重共线性程序_用 VIF 方法消除多维数据中的多重共线性
  18. Okhttp 拦截器 请求添加公共参数、公共Headers 方法
  19. Thread.interrupted()
  20. tim拒绝远程连接服务器失败怎么办,腾讯tim怎么开启远程控制-腾讯tim开启远程控制的方法 - 河东软件园...

热门文章

  1. 「代码随想录」62.不同路径【动态规划】详解!
  2. D. Multiplication Table 二分查找
  3. 苹果mac思维导图软件:mindmanager
  4. 如何在 Mac 上的照片中创建幻灯片?
  5. 如何制作macOS Monterey启动U盘
  6. Easy Data Transform如何在Excel中删除重复的行?
  7. 《长城保护总体规划》出台 为长城保护提供遵循依据
  8. eclipse 配置多个tomcat
  9. 编码之道:是谁制造了混乱
  10. 思科和华为交换机常用命令对比学习