VPP代码阅读中文注解(二)

clib_mem_init_thread_safe有2个版本。

其中一个在mem_mheap.c中

void *
clib_mem_init_thread_safe (void *memory, uword memory_size)
{
  mheap_t *h;
  u8 *heap;

  clib_mem_init (memory, memory_size);

  heap = clib_mem_get_per_cpu_heap ();
  ASSERT (heap);

  h = mheap_header (heap);

  /* make the main heap thread-safe */
  h->flags |= MHEAP_FLAG_THREAD_SAFE;

  return heap;
}

这里clib_mem_init内部会申请到内存,并将内存地址记录到全局变量里面

clib_mem_get_per_cpu_heap再从全局变量里面读取出来。

h为所申请到内存的头部。

 

另外一个版本在mem_dlmalloc.c中

void *
clib_mem_init_thread_safe (void *memory, uword memory_size)
{
  return clib_mem_init (memory, memory_size);
}


/* Initialize CLIB heap based on memory/size given by user.
   Set memory to 0 and CLIB will try to allocate its own heap. */
void *
clib_mem_init (void *memory, uword memory_size)
{
  u8 *heap;

  if (memory)
    {
      heap = create_mspace_with_base (memory, memory_size, 1 /* locked */ );
      mspace_disable_expand (heap);
    }
  else
    heap = create_mspace (memory_size, 1 /* locked */ );

  clib_mem_set_heap (heap);

  if (mheap_trace_main.lock == 0)
    clib_spinlock_init (&mheap_trace_main.lock);

  return heap;
}

可以看出,本模块又委托mspace模块来管理内存。并划分为可动态扩展和不可动态扩展

clib_mem_set_heap会把heap值记录到全局变量里面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值