结构体内存对齐的原则及原理
结构体是C语言的一大特色,今天就来思考两个问题。
- 它的成员的顺序排列有什么要求吗?
原则一:结构的首变量地址偏移量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
结构体内存对齐的原则及原理相关推荐
- 【APUE】Chapter17 Advanced IPC sign extension 结构体内存对齐
17.1 Introduction 这一章主要讲了UNIX Domain Sockets这样的进程间通讯方式,并列举了具体的几个例子. 17.2 UNIX Domain Sockets 这是一种特殊s ...
- c语言 char转int_图文并茂,一文讲透C语言结构体内存对齐
↑点击上方蓝色字体,关注"嵌入式软件实战派"获得更多精品干货. (以下有约5000字内容,建议收藏再读,推荐下载源码自行测试以加深理解.) 面试官:你知道C语言的结构体对齐吗? 应 ...
- printf打印结构体_工程师:这道题80%初学者都没做对!你确定搞懂结构体内存对齐了?...
这是工程师面试后的实际经历-- 这道经典.易错的关于C语言结构体内存对齐的题目,你真的会吗: 求32bit环境下以下结构体所占的字节数:typedef struct test_struct{ char ...
- struct结构体内存对齐解析
为什么要内存对齐 虽然所有的变量最后都会保存到特定的地址内存中去,但是相应的内存空间必须满足内存对齐的要求,主要基于存在以下两个原因: 硬件平台原因: 并不是所有的平台都能够访问任意地址上的任意数据, ...
- 【C语言】一文搞定如何计算结构体的大小----结构体内存对齐规则
要搞定如何正确地计算一个结构体的大小,我们就要深刻理解结构体内存对齐规则: 结构体内存对齐规则: 1.结构体的第一个成员永远在结构体起始位置偏移量为0的位置: 2.结构体成员从第二个成员开始,总是放在 ...
- 关于C语言中的结构体内存对齐与位段问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 结构体的内存对齐与位段 一.结构体的内存对齐 1.为什么会有内存对齐? 2.如何内存对齐 3. 如何在设计结构体的时候,既要 ...
- 语言结构体在内存的分布_结构体内存对齐,这篇文章给你彻底搞会!(干货收藏)...
脚本之家 你与百万开发者在一起 公众号:C语言编程 作者:薛定谔的coding猫 一.内存对齐的原因 1.平台原因(移植原因):一些资料上是这样说的,"不是所有的硬件平台都能访问任意地址上 ...
- c#往结构体里面读数据_结构体内存对齐,这回给你彻底搞会!
一.内存对齐的原因 1.平台原因(移植原因):一些资料上是这样说的,"不是所有的硬件平台都能访问任意地址上的任意数据:某些硬件平台只能在某些特定地址处取某些特定的数据,否则就会抛出硬件异常 ...
- C语言结构体内存对齐问题
参考博文:C语言结构体内存对齐问题 成员对齐: 以4字节对齐为例,如果自身类型小于4字节,则该成员的首地址是自身类型大小的整数倍:如果自身类型大于等于4字节,则该成员的首地址是4的整数倍.若内嵌结 ...
- 室友利用一把王者的时间就学会了【C语言结构体内存对齐】
文章目录 一.什么是结构体内存对齐? 二.结构体的对齐规则 结构体内存对齐规则的具体应用 三.为什么会存在内存对齐 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.什么是结构体内存对齐? 从 ...
最新文章
- Spring Boot 特性 —— SpringApplication
- iOS Hardware Guide
- 《大话移动 APP 测试》
- pyspark.zip/pyspark/worker.py:53: UnicodeWarning: Unicode equal comparison failed to convert both ar
- outlook2016投票_投票:2016年读者选择奖和最佳采访奖
- CODE[VS]1012 最大公约数和最小公倍数问题
- office选项-》高级-》显示 中, 显示此数目的“最近使用的文档” 为灰色,无法更改
- Spider局域网通讯软件
- Linux 之 利用Google Authenticator实现用户双因素认证
- Java多线程看着一篇足够了!
- Hibernate jar问题
- win7下Visual Studio 2012 update4、AutoCAD 2016和二次开发插件ObjectARX2016环境安装及配置
- AWSS3文件断点下载,分片上传,断点续传
- Autodesk 3ds Max 渲染之后保存页面卡死问题
- (基础)单个字符的大小写转换
- win2008 有几个版本?区别是什么?
- python检测多重共线性程序_用 VIF 方法消除多维数据中的多重共线性
- Okhttp 拦截器 请求添加公共参数、公共Headers 方法
- Thread.interrupted()
- tim拒绝远程连接服务器失败怎么办,腾讯tim怎么开启远程控制-腾讯tim开启远程控制的方法 - 河东软件园...