BGET内存分配器
BGET是一个全面的内存分配包,可以根据应用程序的需要轻松配置。BGET在分配和释放缓冲区所需的时间以及缓冲池管理所需的内存开销方面都很有效。它会自动整合连续的空间,以最大限度地减少碎片。BGET由编译时定义配置,主要选项包括:
- 内置的测试程序,用于练习BGET并演示如何使用各种功能。
- 通过“第一次适合”或“最佳适合”方法进行分配。
- 在发布时擦除缓冲区以捕获引用先前释放的存储的代码。
- 用于转储单个缓冲区或整个缓冲池的内置例程。
- 检索分配和池大小统计信息。
- 将缓冲区大小量化为2的幂以满足硬件对齐约束。
- 通过对用户定义函数的回调自动池压缩,增长和收缩。
BGET的应用范围可以从基于ROM的嵌入式程序中的存储管理到提供构建包含垃圾收集的多任务系统的框架。BGET使用该<assert.h>
机制进行广泛的内部一致性检查 ; 所有这些检查都可以通过使用已NDEBUG
定义的编译来关闭,从而产生具有最小尺寸和最大速度的BGET版本。
BGET的基本算法经受住了时间的考验; 自第一次实施此代码以来已超过25年。然而,它比许多操作系统的原生分配方案效率要高得多:Macintosh和Microsoft Windows,其中两个程序通过将BGET分层作为底层系统顶层的应用程序级内存管理器而获得了大幅提升。
BGET已在最大的主机 和最低的微处理器上实现。它已成为多任务操作系统,多线程应用程序,数据网络交换处理器中的嵌入式软件以及大量C程序的核心。虽然它多年来已经增加了灵活性和附加选项,但它仍然快速,高效,便携,并且易于集成到您的程序中。
BGET实施假设
BGET以尽可能便携的方言编写。关于底层硬件架构的唯一基本假设是分配的存储器是线性阵列,其可以作为C的向量来寻址char
对象。在分段地址空间体系结构上,这通常意味着BGET应该用于在单个段内分配存储(尽管一些编译器模拟分段体系结构上的线性地址空间)。在分段体系结构上,BGET缓冲池可能不会大于一个段,但由于BGET允许任意数量的单独缓冲池,因此对可管理的总存储没有限制,只能在最大的单个对