前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >向上取整算法

向上取整算法

作者头像
Masimaro
发布2019-02-25 17:20:41
1.4K0
发布2019-02-25 17:20:41
举报

在进行内存分配的时候一般都需要在实际使用内存大小的基础上进行内存对齐,比如一般32位平台进行4字节对齐,而64位平台使用8字节对齐等等。 一般采用的算法是先利用公式 $int(\frac{a + b - 1} { b})$(其中a是实际使用的内存, b是对齐值) 然后根据这个值乘以b即可得到对应的对齐值

公式推导

$$ 假设 A = NB +M (M \in \left[0,B-1\right])$$ $$\because\frac{A}{B} = N + \frac{M}{B}$$ $$\because M \in\left[0, B-1\right]$$ $$\therefore \frac{A}{B} \leq \frac{NB +B -1}{B} \leq \frac{A + B -1}{B}$$ 从上面可以得出$$\frac{A}{B}$$向上取整可能是int($$\frac{A+B-1}{B}$$)但是具体是否有比它小的整数,仍然不能确定.因此我们根据推导一下这个结果与$$\frac{A}{B}$$向上取整的结果是否相同 $$ 假设 A = NB +M (M \in \left[0,B-1\right])$$ $$当M = 0时UP(\frac{A}{B}) = N$$ $$当M \neq 0时,UP(\frac{A}{B}) = N$$ 而针对int($$\frac{A+B-1}{B}$$)的结果 $$当M = 0时int(\frac{A+B-1}{B} )=int(\frac{NB+B -1}{B}) = int(N + 1 - \frac{1}{B}) $$ $$\because \frac{1}{B} < 1$$ $$\therefore int(\frac{A+B-1}{B} )$$ $$当 M \neq 0 时int(\frac{A+B-1}{B} ) = int(\frac{NB +M + B -1}{B}) = int(N + 1 + \frac{M-1}{B})$$ $$当M = 1时 int(\frac{A+B-1}{B} ) = int(N + 1 + \frac{M-1}{B}) = N + 1$$ $$当1 < M \leq B-1时 \frac{M -1}{B} < 1$ $\therefore int(\frac{A+B-1}{B} ) = int(N + 1 + \frac{M-1}{B}) = N$$ 从上面的推导来看二者的值完全相同所以可以得出结论 $$UP(\frac{A}{B}) = int(\frac{A + B - 1}{B})$$ 所以当我们对A字节的内存进行B字节的对齐时可以使用公式 $$int(\frac{A + B - 1}{B}) \times B $$

补充

其实还有一个算法

long(A + B - 1) &~ (B - 1)

也可以计算,但是我没有弄清楚它的原理是什么,暂时不管先记住再说^_^ 这里对数学公式的支持不太好,如果想看完整的点击这里

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 公式推导
  • 补充
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档