码迷,mamicode.com
首页 > 编程语言 > 详细

向上取整算法

时间:2017-12-07 23:59:22      阅读:349      评论:0      收藏:0      [点我收藏+]

标签:因此   log   数学公式   大小   取整   span   等等   pre   支持   

在进行内存分配的时候一般都需要在实际使用内存大小的基础上进行内存对齐,比如一般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)

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

向上取整算法

标签:因此   log   数学公式   大小   取整   span   等等   pre   支持   

原文地址:http://www.cnblogs.com/lanuage/p/8001378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!