---------------------------------------------
-- 时间: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 内存对齐算法相关推荐

  1. Eigen向量化内存对齐/Eigen的SSE兼容,内存分配/EIGEN_MAKE_ALIGNED_OPERATOR_NEW

    1.总结 对于基本数据类型和自定义类型,我们需要用预编译指令来保证栈内存的对齐,用重写operator new的方式保证堆内存对齐.对于嵌套的自定义类型,申请栈内存时会自动保证其内部数据类型的对齐,而 ...

  2. iOS之深入解析内存对齐的底层原理

    CPU 存取原理 一."存"示例 CPU 并不是以字节为单位存取数据的.CPU 把内存当成是一块一块的,块的大小可以是2,4,8,16字节大小,因此 CPU 在读取内存时是一块一块 ...

  3. DLmalloc 内存分配算法

    dlmalloc由Doug Lea编写的内存分配算法 (1)mspace_malloc/mspace_free (2) dlmalloc/dlfree 1.边界标记 2.空闲块分箱:2个分箱数组 (1 ...

  4. 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前我自己也写过基于链表的内存分配算法,但是看了rawos的内存分配算法,还是感觉rawos写 ...

  5. 【学习体会】aligned_malloc实现内存对齐

    什么是内存对齐?有两种解释: 存放数据的首地址是某个数(通常它为4,8或者32)的倍数. 数据结构所占字节数是某个数(通常它为4,8或者32)的倍数. 对于2,举个最简单的例子: struct{int ...

  6. 2万字 + 50 张图,细说 JVM 内存分布、内存对齐、压缩指针

    今天为大家带来一篇 2 万字的硬核技术文章. 本文我们将从计算机组成原理的角度详细阐述对象在JVM内存中是如何布局的,以及什么是内存对齐,如果我们头比较铁,就是不进行内存对齐会造成什么样的后果,最后引 ...

  7. 内存对齐是什么?为什么要内存对齐?

    原文: http://blog.csdn.net/liupeng900605/article/details/7530010 首先由一个程序引入话题:  1 //环境:vc6 + windows sp ...

  8. 从Eigen向量化谈内存对齐

    作者丨王金戈@知乎(已授权) 来源丨计算机视觉SLAM 编辑丨realcat 缘起 Eigen是一个非常常用的矩阵运算库,至少对于SLAM的研究者来说不可或缺.然而,向来乖巧的Eigen近来却频频闹脾 ...

  9. 内存对齐与CPU缓存

    公司有小伙伴提出了类似的问题, 根据自己的思路,整理了一下相关的内容,做了一期分享. 目录 一.内存分页/分段管理.内存对齐 1.前置知识点 2.内存分页.分段 4.何为内存对齐 5.为何要有内存对齐 ...

最新文章

  1. 5分钟,看尽芯片和摩尔定律“你追我赶”的抗衡50年
  2. mysql 修改上传文件大小限制吗_修改PHP上传文件大小限制的方法(转)
  3. element vue 纵向滑动条_【求助】vue element搭建的后台,侧边栏如何设置滚动条?...
  4. C语言的那些秘密之---函数返回局部变量(转)
  5. 微课|中学生可以这样学Python(2.2.2节+2.2.5节):关系运算符和集合运算符
  6. Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
  7. kubernetes之一:Pod
  8. Android 十大调试方法
  9. Unity3D开发资料
  10. 宗成庆《自然语言理解》第三章作业
  11. 如何解决手机电话本CSV格式和VCF格式的转换
  12. 路由器和交换机的转发过程
  13. 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
  14. Python 树状图怎么画
  15. STAT0023 STATISTICS FOR PRACTICAL COMPUTING
  16. Markdown 中的flow语法 flowchart.js 的基础教程
  17. iPhone十二年了,多希望这是苹果的一个新轮回!
  18. WiFi万能钥匙,真的过气了?
  19. MATLAB之极限、积分、微分
  20. 页面还未加载完成显示loading

热门文章

  1. SDRAM读写一字(上)
  2. 尚硅谷公开课--struts2--2--搭建struts2环境以及struts2简单例子
  3. CSS 实现加载动画之四-圆点旋转
  4. AMD CPU真烂!售后服务也很可恶!
  5. CycleGAN非配对图像生成,定制你的卡通照
  6. 逆序数问题(归并排序,C++)
  7. VOC 灰度图 索引图
  8. 4:springApplication.run 原理
  9. 不用计算实现 图片懒加载
  10. go基础语法:数组定义