关于对齐

对齐多用于内存管理中,为了使得CPU的存取速度更快。给定一个对齐因子,所有的地址都以该对齐因子为基准对齐。即:地址为该对齐因子的整数倍。

在rtems中,有如下代码:

RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_up(
  uintptr_t value,
  uintptr_t alignment
)
{
  uintptr_t remainder = value % alignment;

  if ( remainder != 0 ) {
    return value - remainder + alignment;
  } else {
    return value;
  }
}

RTEMS_INLINE_ROUTINE uintptr_t _Heap_Align_down(
  uintptr_t value,
  uintptr_t alignment
)
{
  return value - (value % alignment);
}

关于对齐,以上是rtems中关于向上对齐和向下对齐的两段代码。之前看到对齐的代码总是觉得不重要,就跳过去了,久而久之就不太清楚其运作方式。其实,稍微看一下就比较清楚了。。从代码中可以看出:

向上对齐,就是按照对齐因子。将要对齐的值一直上浮到正好可以整除对齐因子即可,要求,是上浮的最小值。同理,向下对齐,那就是一直将要对齐的值下降到刚好可以整除对齐因子的值。代码实现也很便捷。

 

对于向上对齐,首先取得对齐的值关于对齐因子的余数,这余数就是多出来的零头。去掉这个零头,再加上一个对齐因子,对齐因子一定比这个余数大,即上浮的最小值为:对齐因子 - 余数。

对于乡下对齐,也是取得余数,直接将要对齐的值减掉该余数即可。即余数是最小的下浮的值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值