在FreeRTOS
中,堆只是一个全局数组,其大小(允许调用heapSize
)在H
文件中定义,用户可以更改。这个数组是一个非初始化的全局数组,它使它成为图像的BSS
部分的一部分,因为它在加载时用零填充,然后,每个内存分配都来自这个数组和每个地址分配的内存是该数组的偏移量。
因此,为了最大限度地利用内存大小,我们可以估算整个程序的Data
,Text
和BSS
区域的大小,并将堆大小定义为类似于heapSize = RAM_size - Text_size - Data_size - BSS_size
。
我想知道Linux操作系统的等效实现是什么。 Linux可以扫描给定的RAM并在运行时确定其大小吗? linux有一个等效的数据结构来管理堆吗?如果是这样,它如何首先为这个数据结构分配内存?
答案 0 :(得分:0)
Linux中的堆是动态的,因此每当您请求更多内存时它就会增长。这可以通过使用交换文件扩展到物理内存大小,其中RAM的一些未使用部分被写入磁盘。
所以我认为你需要考虑“我的应用程序需要多少内存”而不是“有多少可用内存”。