向上取整算法

在进行内存分配的时候一般都需要在实际使用内存大小的基础上进行内存对齐,比如一般32位平台进行4字节对齐,而64位平台使用8字节对齐等等。
一般采用的算法是先利用公式

int(a+b1b)
(其中a是实际使用的内存, b是对齐值)
然后根据这个值乘以b即可得到对应的对齐值

公式推导

A=NB+M(M[0,B1])

AB=N+MB

M[0,B1]

ABNB+B1BA+B1B

从上面可以得出 AB 向上取整可能是int( A+B1B )但是具体是否有比它小的整数,仍然不能确定.因此我们根据推导一下这个结果与 AB 向上取整的结果是否相同

A=NB+M(M[0,B1])

M=0UP(AB)=N

M0UP(AB)=N

而针对int( A+B1B )的结果

M=0int(A+B1B)=int(NB+B1B)=int(N+11B)

1B<1

int(A+B1B)

M0int(A+B1B)=int(NB+M+B1B)=int(N+1+M1B)

M=1int(A+B1B)=int(N+1+M1B)=N+1

1<MB1M1B<1

int(A+B1B)=int(N+1+M1B)=N

从上面的推导来看二者的值完全相同所以可以得出结论

UP(AB)=int(A+B1B)

所以当我们对A字节的内存进行B字节的对齐时可以使用公式

int(A+B1B)×B

补充

其实还有一个算法

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

也可以计算,但是我没有弄清楚它的原理是什么,暂时不管先记住再说^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值