free命令查看系统内核堆信息(个人分析)

free命令的函数实现是:__tshellSysCmdFree()

 

其中查看系统内核堆大小实现是:API_RegionShow(0):

该函数的本质就是查看_K_pheapKernel系统内核堆的管理链表(一般情况下系统和内核堆是一样的链表结构)。

该堆得初始化实在bsp在API_KernelStart函数中初始化系统内核堆空间(大小配置在链接脚本里 配置的,如下图所示)至于为什么要减去128(节点管理占用资源)

 

注意这个不是说是data段全部都是系统堆空间(你会发现系统堆空间不data段少很多)

 

接下来看看链接脚本里如何配置这个系统堆大小如何管理的:

 

这个链接脚本可以看到“__heap_start = .”表示__heap_start 的地址为当前位置的地址(而不是我们在map表设置的data段的起始地址)。而__heap_end = ORIGIN(DATA) + LENGTH(DATA) - 128;则表示__heap_end的地址为data段的结束地址(其中的128可以忽略)。所以实际的系统内核堆空间大小不是data段大小(data段里栈段,bss段等,具体请看链接脚本)。

要想看到底bsp在设置系统内核堆空间大小,可以把bsp中的启动log打开(如下图所示)就可以看到内核堆初始化大小(一般情况下系统堆和内核堆是同一块内存空间)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值