318 Star 2.1K Fork 1K

OpenHarmony / kernel_liteos_a

 / 详情

内存管理初始化代码的疑问

已完成
任务
创建于  
2020-10-13 15:01

在内存管理初始化这部分的代码中,第1804行
newNode->selfNode.sizeAndFlag = (size - (UINT32)((UINTPTR)newNode - (UINTPTR)pool) - OS_MEM_NODE_HEAD_SIZE);

其中newNode节点为内存池中的第一个节点,其大小的计算有疑问?
其中OS_MEM_NODE_HEAD_SIZE是指的endNode节点占的大小吗,如果是那么是否应该还需要在减去newNode本身所占用的大小,即应该减去2倍的OS_MEM_NODE_HEAD_SIZE。

评论 (4)

quyq 创建了任务
quyq 关联仓库设置为OpenHarmony/kernel_liteos_a
quyq 修改了描述
展开全部操作日志

OS_MEM_NODE_HEAD_SIZE是指newNode自身的大小,sizeAndFlag的值已经覆盖了endNode的大小

这里的node都是动态意义的(尾节点可能有特殊性),即在未分配前有效,大小包括node HEAD占用的内存,也就是借用空闲内存区的前部记录控制管理信息,一旦分配出去就什么都没了。

这里的node都是动态意义的(尾节点可能有特殊性),即在未分配前有效,大小包括node HEAD占用的内存,也就是借用空闲内存区的前部记录控制管理信息,一旦分配出去就什么都没了。

报歉说错了。node的大小包括node HEAD本身占用的内存;分配时,按“需求大小”+“node HEAD大小”的和查找合适的node,并且分配后这个node HEAD还存在。

学艺不精,再次致歉。

Denny 负责人设置为JerryH

是的,正解
报歉说错了。node的大小包括node HEAD本身占用的内存;分配时,按“需求大小”+“node HEAD大小”的和查找合适的node,并且分配后这个node HEAD还存在。

学艺不精,再次致歉。

@laokz

JerryH 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
C
1
https://gitee.com/openharmony/kernel_liteos_a.git
git@gitee.com:openharmony/kernel_liteos_a.git
openharmony
kernel_liteos_a
kernel_liteos_a

搜索帮助