利用ROUNDUP函数进行内存对齐

内存对齐

比如一个内存单元的长度为2,为了存取方便我们应该尽量把数据放在2的倍数的位置上(如位置0,2,4,6等),此时称该数据的位置是与某个值(2)对齐的。如果放在了没对齐的地方(比如位置3)上,该数据可能跨过了一次能读取的跨度,就必须读两次才行。

为了杜绝这种低效行为,我们使用一个函数ROUNDUP(n, size)来对原地址n进行修改,从而实现内存对齐。

举个例子,ROUNDUP(9,2)=10,也就是把本来的位置9改成对齐到位置10。

 

其算法通常是这样的: #define ROUNDUP(x,n) ((x+(n-1))&(~(n-1))),n为对齐的大小

 

下面对该算法进行一下解释

我们知道,对于两个正整数 x, n 总存在整数 q, r 使得


x = nq + r, 其中  0<= r <n                  //最小非负剩余表示法

q, r 是唯一确定的。q = [x/n], r = x - n[x/n]. 这个是我们所熟悉的带余除法的一个简单形式。在 c 语言中, q, r 容易计算出来: q = x/n, r = x % n.

所谓把 x 按 n 对齐指的是:若 r=0, 取返回值为qn, 若 r>0, 取 (q+1)n.

这也相当于把 x 表示为:

x = nq + r'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值