AMPS:内存管理(一)
高效的内存管理是卓越的软件产品的必备特征,如果在分配和释放内存时包含了代价高昂的查找、排序、重新组合操作,内存处理可能会成为系统性能的瓶颈。AMPS内存管理子系统的设计目标如下:
内存管理必须快且系统开销小。在不引入垃圾收集器的前提下尽可能地减少内存泄露。内存分配后保持相对长的时间来减小释放引起的系统开销。 AMPS通过以下方法达到如上目标: 应用协议服务器通常以突然爆发的方式使用内存,他们通过使用较大的数据结构来完成数据处理,然后丢弃这些数据结构。比如说处理来自网络的一条协议消息,消息进入系统后,通常进行解析、处理,有可能会修改,增加一些新的数据,或者删除、更新一些数据,在每一个处理阶段,都涉及动态分配内存,这些内存可能在消息离开系统之后才进行释放,或者,每个独立的内存对象在一个阶段处理完成切换到另一阶段时,内存可能被释放,然而,如果在所有阶段全处理完再释放,这样的做法优于前者,原因如下:- 如果我们累积所有分配的小块内存,然后一次性释放,在本质少可以减少内存泄露,因为我们不需要在多个地方进行释放操作,从而避免了遗漏。 在一开始预分配一大块内存,当消息进入系统后,通过建立的简单,高效的分配器在这个buffer上面分配小的内存对象,这样就不用担心管理释放内存的链表以及小对象分配引起的系统开销。
AMPS提供一个API来在创建上层的内存存管理对象,这个API返回一个对象做为参数传递个另一个分配API,其分配和销毁细节如上所示,在管理对象内部建立的buffer链表,通过内存管理对象提供的另一个API来释放。