学习笔记-字节对齐方法

// 不同内存范围的上调大小
enum
{
  EAlign128 = 8, 
  EAlign256 = 16, 
  EAlign512 = 32,
  EAlign1024 = 64, 
  EAlign2048 = 128,
  EAlign4096 = 256
};
// bytes 对应上调大小
inline size_t alloc::M_align(size_t bytes)
{
  if (bytes <= 512)
  {
    return bytes <= 256
      ? bytes <= 128 ? EAlign128 : EAlign256
      : EAlign512;
  }
  return bytes <= 2048
    ? bytes <= 1024 ? EAlign1024 : EAlign2048
    : EAlign4096;
}

// 将 bytes 上调至对应区间大小
inline size_t alloc::M_round_up(size_t bytes)
{
  return ((bytes + M_align(bytes) - 1) & ~(M_align(bytes) - 1));
}

假设bytes=10,M_align(bytes)=8,(10+7)&~7=16;

代码来自https://github.com/Alinshans/MyTinySTL/blob/master/MyTinySTL/alloc.h#L36

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值