内存管理

每个进程可支配的全部内存空间有下述几个部分构成:

  • 全局堆
    系统初始化时,由系统维护的堆空间。

  • 全局池
    系统初始化时,由系统维护的内存池。

  • 进程堆
    在进程初始化时,由用户手动指定指定的堆空间。(可留空)

  • 进程栈
    在进程初始化时,由用户手动指定指定的栈空间。

全局堆

全局堆中的内存块是尽可能紧密排布的,使用时需要对链表进行逐块搜索,这使得其申请与释放较为复杂。
为了解决这一问题而提出了全局池。

全局池

全局池是一系列提前划分好的内存块,当进程申请时,可以快速的分配这些块给进程使用。
但是,内存块分配的多了会占用大量空间,分配少了会使进程无法获得资源。且其无法根本上解除对内存资源的争抢问题,因为其入口仍然是单一的,于是在此基础上提出了进程堆。

进程堆

进程堆是由该进程独享的堆空间,永远不会出现资源竞争。进程堆可以不分配,有些进程是不需要堆的,因此硬性要求堆的分配是不合理的。但若某个进程有着频繁的空间申请行为时,应该为这个进程分配专有的进程堆。

但要注意的是,进程堆并不是一个静态堆,其本身可以 由 GC 进行管理。

进程栈

额… 应该不用解释了吧。

GC

GC 是一项可选功能,旨在为优化单片机的内存碎片化。