一种内存池管理组件制造技术

技术编号:24572459 阅读:30 留言:0更新日期:2020-06-20 23:55
本发明专利技术公开了一种内存池管理组件,具备低延时、高并发的特点,并且能够支持水平扩展。其技术方案为:内存池管理组件包括单线程内存池、多线程内存池以及基于内存池的分配器,实现了低延时、高并发、可扩展的内存分配。一方面使用了内存局部存储技术,实现了可支持多线程高性能访问的块内存池,是相应金融软件实现的基础;另一方面实现了固定内存分配器,固定内存分配器支持内存池管理组件中的任意内存池,具有灵活、可扩展的特点,是相应内存数据库实现的基础。

A memory pool management component

【技术实现步骤摘要】
一种内存池管理组件
本专利技术涉及内存管理技术,具体涉及支持水平扩展的低延时、高并发的内存池管理组件,尤其可应用于金融交易软件领域。
技术介绍
金融交易软件通常伴随着频繁且大量的数据交互,因此内存的申请和释放操作十分频繁。传统的malloc/free和new/delete在堆上申请和释放内存都有一定的额外开销,默认的内存管理函数还考虑到多线程的应用,开销因而进一步增加。如果应用程序频繁地在堆上分配和释放内存,则会导致性能的损失,同时系统中会出现大量的内存碎片,降低内存的利用率。因此,如何解决例如金融交易软件中的应用程序频繁分配和释放内存导致性能损失和内存利用率降低的问题,是目前业界亟需研究的课题。
技术实现思路
以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。本专利技术的目的在于解决上述问题,提本文档来自技高网...

【技术保护点】
1.一种内存池管理组件,其特征在于,包括单线程内存池、多线程内存池、和基于内存池的分配器,基于内存池的分配器进一步包括系统内存分配模块和固定内存分配器,其中:/n单线程内存池,用于申请至少一个整块内存空间并为应用程序分配指定大小的内存块,其中每一个内存空间在其整个生命周期中只被单一一个线程所使用,其中单线程内存池在存续期间不会释放内存空间,优先在所申请的内存空间中做内存块的分配和释放操作;/n多线程内存池,用于为不同的线程申请对应的不同的内存空间,其中每一个内存空间归属于一个独立的线程,不同线程之间的内存访问相互独立,当一个线程有内存申请操作时,优先在线程归属的内存池中分配和释放;/n系统内存...

【技术特征摘要】
1.一种内存池管理组件,其特征在于,包括单线程内存池、多线程内存池、和基于内存池的分配器,基于内存池的分配器进一步包括系统内存分配模块和固定内存分配器,其中:
单线程内存池,用于申请至少一个整块内存空间并为应用程序分配指定大小的内存块,其中每一个内存空间在其整个生命周期中只被单一一个线程所使用,其中单线程内存池在存续期间不会释放内存空间,优先在所申请的内存空间中做内存块的分配和释放操作;
多线程内存池,用于为不同的线程申请对应的不同的内存空间,其中每一个内存空间归属于一个独立的线程,不同线程之间的内存访问相互独立,当一个线程有内存申请操作时,优先在线程归属的内存池中分配和释放;
系统内存分配模块,预先一次性申请一内存空间作为单线程内存池或多线程内存池并在内存池大小需要动态扩展时调用,且为该内存池定义分配和释放内存块的成员函数;
固定内存分配器,对单线程内存池或多线程内存池内的内存空间进行二次分配,采用固定大小的内存单元,应用程序采用指定的编号,在无需内存地址指针的情况下通过固定内存分配器对外提供的接口直接访问对应的内存地址。


2.根据权利要求1所述的内存池管理组件,其特征在于,单线程内存池中的所有内存空间分为当前内存、空闲内存和已分配的内存,其中当前内存是单线程内存池最近一次向应用程序分配内存所使用的内存空间,空闲内存是已被单线程内存池释放的内存空间,其余的内存空间都是已分配的内存。


3.根据权利要求2所述的内存池管理组件,其特征在于,单线程内存池中的每一个内存空间包含一个引用计数和多个内存块,其中引用计数位于内存空间的头部,引用计数的数值是对应内存空间实际为应用程序分配的内存块的数量,每一内存块包含头指针和数据域,所有内存块的头指针均指向当前内存空间的头部且用于释放内存块时更新引用计数的数值。


4.根据权利要求3所述的内存池管理组件,其特征在于,单线程内存池配置为当创建单线程内存池时不申请内存空间,设置当前内存为空NULL,标记可用内存起始位置的已使用空间为0。


5.根据权利要求4所述的内存池管理组件,其特征在于,单线程内存池配置为当应用程序首次向单线程内存池申请内存分配时,单线程内存池首先申请一块连续的内存空间,其中当前内存的指针指向申请得到的内存空间的起始地址,已分配内存大小为内存块的头指针大小与所申请的内存空间大小之和,即第一个内存块的大小;
当前内存空间的头部所维护的引用计数随着内存分配次数递增,为每次内存申请分配的内存块的头指针指向当前内存的起始地址,用于后续管理引用计数,单线程内存池返回给应用程序的地址为内存块的数据域的起始地址,后续的内存分配根据已使用空间大小在剩余空间中连续分配,其中当剩余空间不足以分配所需内存大小时,单线程内存池优先将之前已申请但已不使用的空闲内存分配给应用程序,若不存在空闲内存,单线程内存池则重新申请内存,且当前内存随...

【专利技术属性】
技术研发人员:张海荣高鹏李思昌
申请(专利权)人:上海金融期货信息技术有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1