小内存管理法里面heap_mem 初始化问题

发布于 2020-12-03 14:44:00    浏览:272

原文代码:

    heap_ptr = (rt_uint8_t *)begin_align;

    RT_DEBUG_LOG(RT_DEBUG_MEM, ("mem init, heap begin address 0x%x, size %d\n",
                                (rt_ubase_t)heap_ptr, mem_size_aligned));

    /* initialize the start of the heap */

    mem        = (struct heap_mem *)heap_ptr;
    mem->magic = HEAP_MAGIC;
    mem->next  = mem_size_aligned + SIZEOF_STRUCT_MEM;
    mem->prev  = 0;
    mem->used  = 0;

这里面的这一句:

 mem->next  = mem_size_aligned + SIZEOF_STRUCT_MEM;

目的是想把mem的next 指向尾部节点 ,但是mem_size_aligned + SIZEOF_STRUCT_MEM 只是offset ,缺少了基地址 。

是否要改成:

mem->next  = heap_ptr + mem_size_aligned + SIZEOF_STRUCT_MEM;

heap_ptr 是内存分配的其实地址。

我的理解是否正确?

查看更多

楼兰听雨
楼兰听雨 2020-12-03
This guy hasn't written anything yet

我看代码 直到了 ,这里面的所有的 next 实际上都是存的offset ,最有在换算的时候用的是基地址数组的模式 ,heap_ptr[next] 这样是对的 。我之前代码看的不够仔细

1 个回答

撰写答案

请登录后再发布答案,点击登录
关注者
0
被浏览
272

发布
问题

分享
好友

手机
浏览

扫码手机浏览