在
FreeRTOS
中,堆只是一个全局数组,大小(我们称之为heapSize
)在一个H
文件中定义,用户可以更改。这个数组是一个非初始化的全局数组,这使它成为镜像的BSS
部分的一部分,因此在加载时填充了零,然后每次分配内存都从这个数组中进行,并且每个分配内存的地址都是这个数组的偏移量。
因此,为了最大利用内存大小,我们可以近似估算整个程序的Data
,Text
和BSS
区域的大小,并将堆的大小定义为heapSize = RAM_size - Text_size - Data_size - BSS_size
。
我想知道Linux OS中的等效实现是什么。Linux能否扫描给定的RAM并在运行时决定其大小?Linux是否有相应的数据结构来管理堆?如果有,它如何为该数据结构分配内存?