Tinux 3.0 内存对齐算法
---------------------------------------------
-- 时间:2018-11-09
-- 创建人:Ruo_Xiao
-- 邮箱:xclsoftware@163.com
---------------------------------------------
最近在研读“Tiniux”操作系统源代码,在内存分配中看见如下代码:
#define OSMEM_ALIGN_SIZE(size) (((size) + OSMEM_ALIGNMENT - 1) & ~(OSMEM_ALIGNMENT-1))
百思之后恍悟,故记录如下:
1、功能:对待分配的字节大小“size”按照“OSMEM_ALIGNMENT ”进行对齐,一般OSMEM_ALIGNMENT 为4(可更改)。
2、栗子:
(1)当 size = 2 时,为了保证内存对齐,需要分配 4B 内存,即:额外再分配 2B 。计算过程如下:
size + OSMEM_ALIGNMENT - 1 = 5,5 & ~(OSMEM_ALIGNMENT - 1) = 101b & ~(3) = 101b & 100b = 4,满足要求。
(2)当 size = 6 时,需要分配 8B 内存,即:额外再分配 2B 。计算过程如下:
size + OSMEM_ALIGNMENT - 1 = 9, 9 & ~(OSMEM_ALIGNMENT - 1) = 101b & ~ (3) = 101b & 100b = 8,满足要求。
3、本质:
(1)因为内存对齐的缘故,地址都是OSMEM_ALIGNMENT的倍数,故地址的低l位都是0,即:取整抛余。
(2)同时,分配的内存至少比申请的内存多,即:比 size 大。size + OSMEM_ALIGNMENT - 1 的原因是无论size为几,都可以让结果恰好增大到离size最近的OSMEM_ALIGNMENT的倍数的数。
(SAW:Game Over!)
Tinux 3.0 内存对齐算法相关推荐
- Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW
1.总结 对于基本数据类型和自定义类型,我们需要用预编译指令来保证栈内存的对齐,用重写operator new的方式保证堆内存对齐.对于嵌套的自定义类型,申请栈内存时会自动保证其内部数据类型的对齐,而 ...
- iOS之深入解析内存对齐的底层原理
CPU 存取原理 一."存"示例 CPU 并不是以字节为单位存取数据的.CPU 把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此 CPU 在读取内存时是一块一块 ...
- DLmalloc 内存分配算法
dlmalloc由Doug Lea编写的内存分配算法 (1)mspace_malloc/mspace_free (2) dlmalloc/dlfree 1.边界标记 2.空闲块分箱:2个分箱数组 (1 ...
- 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前我自己也写过基于链表的内存分配算法,但是看了rawos的内存分配算法,还是感觉rawos写 ...
- 【学习体会】aligned_malloc实现内存对齐
什么是内存对齐?有两种解释: 存放数据的首地址是某个数(通常它为4,8或者32)的倍数. 数据结构所占字节数是某个数(通常它为4,8或者32)的倍数. 对于2,举个最简单的例子: struct{int ...
- 2万字 + 50 张图,细说 JVM 内存分布、内存对齐、压缩指针
今天为大家带来一篇 2 万字的硬核技术文章. 本文我们将从计算机组成原理的角度详细阐述对象在JVM内存中是如何布局的,以及什么是内存对齐,如果我们头比较铁,就是不进行内存对齐会造成什么样的后果,最后引 ...
- 内存对齐是什么?为什么要内存对齐?
原文: http://blog.csdn.net/liupeng900605/article/details/7530010 首先由一个程序引入话题: 1 //环境:vc6 + windows sp ...
- 从Eigen向量化谈内存对齐
作者丨王金戈@知乎(已授权) 来源丨计算机视觉SLAM 编辑丨realcat 缘起 Eigen是一个非常常用的矩阵运算库,至少对于SLAM的研究者来说不可或缺.然而,向来乖巧的Eigen近来却频频闹脾 ...
- 内存对齐与CPU缓存
公司有小伙伴提出了类似的问题, 根据自己的思路,整理了一下相关的内容,做了一期分享. 目录 一.内存分页/分段管理.内存对齐 1.前置知识点 2.内存分页.分段 4.何为内存对齐 5.为何要有内存对齐 ...
最新文章
- 5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年
- mysql 修改上传文件大小限制吗_修改PHP上传文件大小限制的方法(转)
- element vue 纵向滑动条_【求助】vue element搭建的后台,侧边栏如何设置滚动条?...
- C语言的那些秘密之---函数返回局部变量(转)
- 微课|中学生可以这样学Python(2.2.2节+2.2.5节):关系运算符和集合运算符
- Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
- kubernetes之一:Pod
- Android 十大调试方法
- Unity3D开发资料
- 宗成庆《自然语言理解》第三章作业
- 如何解决手机电话本CSV格式和VCF格式的转换
- 路由器和交换机的转发过程
- 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
- Python 树状图怎么画
- STAT0023 STATISTICS FOR PRACTICAL COMPUTING
- Markdown 中的flow语法 flowchart.js 的基础教程
- iPhone十二年了,多希望这是苹果的一个新轮回!
- WiFi万能钥匙,真的过气了?
- MATLAB之极限、积分、微分
- 页面还未加载完成显示loading