一种内存分配的处理方法及装置

阅读: 评论:0

著录项
  • CN201610116806.6
  • 20160302
  • CN107153618A
  • 20170912
  • 阿里巴巴集团控股有限公司
  • 欧阳圣
  • G06F12/0871
  • G06F12/0871

  • 英属开曼岛大开曼
  • 开曼岛(KY)
  • 北京三友知识产权代理有限公司
  • 李辉
摘要
本申请实施例公开了一种内存分配的处理方法及装置。所述方法包括:获取内存申请信息,判断申请内存是否小于建立的内存池中内存块的最大可分配内存;当判断所述申请内存大于所述最大可分配内存时,根据内存块的数据头中记录的大块内存信息,从大块内存中分配内存给申请内存;否则,判断所述申请内存是否大于当前内存块的空闲内存,当判断所述申请内存小于当前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足申请内存的需求;若所述当前内存块的当前剩余空间满足所述申请内存的需求,从所述当前内存块的当前剩余空间中分配内存给所述申请内存。所述方法及装置可以减少内存分配的时间,提高系统内存利用率,优化系统内存分配效率。
权利要求

1.一种内存分配的处理方法,其特征在于,所述方法包括:

获取内存申请信息,判断申请内存是否小于建立的内存池中内存块的最大可分配内存;

当判断所述申请内存大于所述最大可分配内存时,根据所述内存块的数据头中记录的大 块内存信息,从大块内存中分配内存给申请内存;

否则,判断所述申请内存是否大于当前内存块的空闲内存,当判断所述申请内存小于当 前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述申请内存的需求;

若所述当前内存块的当前剩余空间满足所述申请内存的需求,从所述当前内存块的当前 剩余空间中分配内存给所述申请内存。

2.根据权利要求1所述的一种内存分配的处理方法,其特征在于,所述建立的内存池 被设置成:

被划分成包括至少一个预设固定大小的内存块;

内存池中的内存块被设置成按照内存块的空闲内存从大到小的顺序排列。

3.根据权利要求1或2所述的一种内存分配的处理方法,其特征在于,所述方法还包 括:

当判断所述申请内存大于或等于当前内存块的空闲内存时,基于当前内存块数据头记录 的内存块链表依次在所述内存池中查空闲内存大于或等于所述申请内存的可用内存块;

相应地,若查到所述可用内存块,则所述判断当前内存块的当前剩余空间是否满足所 述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足所述申请内存的需求。

4.根据权利要求3所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

若在所述内存池中未查到空闲内存大于或等于所述申请内存的可用内存块,则在所述 内存池中创建新内存块,以及使用所述新内存块为所述申请内存分配内存。

5.根据权利要求4所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

基于内存块的数据头所指示的下一个内存块,依次比较内存池中内存块的空闲内存与所 述新内存块的空闲内存的大小,将所述新内存块的链表插入到所述内存池中空闲内存大于所 述新内存块的空闲内存的前一个内存块与空闲内存小于所述新内存块的空闲内存的后一个 内存块之间。

6.根据权利要求1所述的一种内存分配的处理方法,其特征在于,所述若所述当前内 存块的当前剩余空间满足所述申请内存需求,从所述当前内存块的当前剩余空间中分配内存 给所述申请内存包括:

若所述当前内存块的当前剩余空间满足所述申请内存的需求,优先从当前内存块的当前 未分配内存空间分配内存给申请内存;

若当前内存块的当前未分配内存不满足所述申请内存的需求,则从当前内存块数据头记 录的已释放内存的空间地址信息中查满足所述申请内存的需求的内存空间进行分配。

7.根据权利要求6所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

若未能从当前内存块数据头记录的已释放内存中查到满足所述申请内存需求的内存 空间,基于当前内存块数据头记录的地址信息依次在所述内存池中查空闲内存大于或等于 所述申请内存的可用内存块;

相应的,若查到所述可用内存块,则所述判断当前内存块的当前剩余空间是否满足所 述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足所述申请内存的需求。

8.根据权利要求7所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

若在所述内存池中未查到空闲内存大于或等于所述申请内存的可用内存块,则在所述 内存池中创建新内存块,以及使用所述新内存块为所述申请内存分配内存。

9.根据权利要求1所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

获取内存释放请求信息,判断释放内存是否大于所述最大可分配内存;

当判断结果为释放内存大于所述最大可分配内存时,根据所述内存释放请求信息以及数 据头记录的大块内存信息定位所述释放内存对应的大块内存的首地址;

释放定位得到的大块内存的数据信息,删除内存块数据头中记录的大块内存地址链表中 所述释放内存对应的大块内存的首地址信息。

10.根据权利要求9所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

当判断结果为释放内存小于所述最大可分配内存时,根据内存释放请求信息定位所述释 放内存在所述内存池对应的待释放内存块中的地址,并释放所述待释放内存块的所述释放内 存的内存空间;

以及,获取所述待释放内存块释放内存后生成的已释放内存的内存空间地址,将所述内 存空间地址插入到所述待释放内存块数据头记录的已释放内存的空间地址信息中。

11.根据权利要求10所述的一种内存分配的处理方法,其特征在于,所述将所述内存 空间地址插入到所述待释放内存块数据头记录的已释放内存的空间地址信息中包括:

判断所述内存空间地址所在的当前节点,与所述当前节点的前一个节点和当前节点后一 个节点是否为连续内存;

若判断的结果为是连续内存,则将所述当前节点、所述当前节点的前一个节点、所述当 前节点的后一个节点合并为一个连续内存的新节点并记录到所述待释放内存块数据头记录 的已释放内存的空间地址信息中;否则,将所述内存空间地址作为新节点插入到所述待释放 内存块数据头记录的已释放内存的空间地址信息中。

12.根据权利要求11所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

判断所述新节点是否位于内存池的首个内存块,若所述新节点不是位于内存池的首个内 存块,则判断所述待释放内存块的空闲内存与最大可分配内存是否相等;

若判断的结果为所述待释放内存块的空闲内存与最大可分配内存相等时,释放所述待释 放内存块的数据存储区域内存空间,删除待释放内存块节点。

13.根据权利要求12所述的一种内存分配的处理方法,其特征在于,所述方法还包括:

若判断的结果为所述待释放内存块的空闲内存与最大可分配内存不相等时,对所述内存 池中内存块的空闲内存进行大小判断后将内存块设置成按照空闲内存从大到小的顺序排序。

14.根据权利要1-2、6-13中任意一项所述的一种内存分配的处理方法,其特征在于, 所述方法还包括:

当检测到内存池的首个内存块指向下一个内存块的头部地址为空,且所述首个内存块的 空闲内存与所述内存块的最大可分配内存相等时,执行销毁所述内存池,释放内存池空间。

15.一种内存分配的处理装置,其特征在于,所述装置包括:

最大内存判断模块,用于获取内存申请信息,判断申请内存是否小于建立的内存池中内 存块的最大可分配内存;

大块内存分配模块,用于当所述最大内存判断模块判断所述申请内存大于所述最大可分 配内存时,根据所述内存块数据头中记录的大块内存信息,从大块内存中分配内存给申请内 存;

剩余空间判断模块,用于判断所述申请内存是否大于当前内存块的空闲内存,当判断所 述申请内存小于当前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述申 请内存的需求;

剩余空间分配模块,用于若所述剩余空间判断模块判断当前内存块的当前剩余空间满足 所述申请内存的需求时,从所述当前内存块的当前剩余空间中分配内存给所述申请内存。

16.根据权利要求15所述的一种内存分配的处理装置,其特征在于,所述建立的内存 池被设置成:

被划分成包括至少一个预设固定大小的包括数据头和数据存储区域的内存块;

内存池中的内存块被设置成按照内存块的空闲内存从大到小的顺序排列。

17.根据权利要求15或16所述的一种内存分配的处理装置,其特征在于,所述装置还 包括:

第一剩余内存块查模块,用于当所述剩余空间判断模块判断所述申请内存大于或等于 当前内存块的空闲内存时,基于当前内存块数据头记录的内存块链表依次在所述内存池中查 空闲内存大于或等于所述申请内存的可用内存块;

第一剩余内存块判断模块,用于若查到所述可用内存块,则所述判断当前内存块的当 前剩余空间是否满足所述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足 所述申请内存的需求。

18.根据权利要求17所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

第一新内存块创建模块,用于若在所述内存池中未查到空闲内存大于或等于所述申请 内存的可用内存块,则在所述内存池中创建新内存块,以及使用所述新内存块为所述申请内 存分配内存。

19.根据权利要求18所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

第一内存块排序模块,用于基于内存块的数据头所指示的下一个内存块,依次比较内存 池中内存块的空闲内存与所述新内存块的空闲内存的大小,将所述新内存块的链表插入到所 述内存池中空闲内存大于所述新内存块的空闲内存的前一个内存块与空闲内存小于所述新 内存块的空闲内存的后一个内存块之间。

20.根据权利要求15所述的一种内存分配的处理装置,其特征在于,所述剩余空间分 配模块包括:

未分配内存分配模块,用于若所述当前内存块的当前剩余空间满足所述申请内存的需 求,优先从当前内存块的当前未分配内存空间分配内存给申请内存;

已释放内存分配模块,用于若当前内存块的当前未分配内存不满足所述申请内存的需 求,则从当前内存块数据头记录的已释放内存的空间地址信息中查满足所述申请内存的需 求的内存空间进行分配。

21.根据权利要求20所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

第二剩余内存块查模块,用于若未能从当前内存块数据头记录的已释放内存中查到 满足所述申请内存需求的内存空间,基于当前内存块数据头记录的地址信息依次在所述内存 池中查空闲内存大于或等于所述申请内存的可用内存块;

第二剩余内存块判断模块,用于若查到所述可用内存块,则所述判断当前内存块的当 前剩余空间是否满足所述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足 所述申请内存的需求。

22.根据权利要求21所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

第二新内存块创建单元,用于当第二剩余内存块判断模块判断结果为在所述内存池中未 查到空闲内存大于或等于所述申请内存的可用内存块,则在所述内存池中创建新内存块, 以及使用所述新内存块为所述申请内存分配内存。

23.根据权利要求15所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

释放内存判断单元,用于获取内存释放请求信息,判断释放内存是否大于所述最大可分 配内存;

大块内存定位模块,用于当所述释放内存判断单元的判断结果为释放内存大于所述最大 可分配内存时,根据所述内存释放请求信息以及数据头记录的大块内存信息定位所述释放内 存对应的大块内存的首地址;

大块内存释放模块,用于释放定位得到的大块内存的数据信息,删除内存块数据头中记 录的大块内存地址链表中所述释放内存对应的大块内存的首地址信息。

24.根据权利要求23所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

释放内存定位模块,用于当释放内存判断单元的判断结果为释放内存小于所述最大可分 配内存时,根据内存释放请求信息定位所述释放内存在所述内存池对应的待释放内存块中的 地址,并释放所述待释放内存块的所述释放内存的内存空间;

已释放内存链表更新模块,用于获取所述待释放内存块释放内存后生成的已释放内存的 内存空间地址,将所述内存空间地址插入到所述待释放内存块数据头记录的已释放内存的空 间地址信息中。

25.根据权利要求24所述的一种内存分配的处理装置,其特征在于,所述已释放内存 链表更新单元包括:

连续内存判断模块,用于判断所述内存空间地址所在的当前节点,与所述当前节点的前 一个节点和当前节点后一个节点是否为连续内存;

内存合并模块,用于若所述连续内存判断模块的判断结果为是连续内存,则将所述当前 节点、所述当前节点的前一个节点、所述当前节点的后一个节点合并为一个连续内存的新节 点记录到所述待释放内存块数据头记录的已释放内存的空间地址信息中;否则,将所述内存 空间地址作为新节点插入到所述待释放内存块数据头记录的已释放内存的空间地址信息中。

26.根据权利要求25所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

新节点判断模块,用于判断所述新节点是否位于内存池的首个内存块,若所述新节点不 是位于内存池的首个内存块,则判断所述待释放内存块的空闲内存与最大可分配内存是否相 等;

节点释放模块,用于若所述新节点判断模块的判断结果为所述待释放内存块的空闲内存 与最大可分配内存相等时,释放所述待释放内存块的数据存储区域内存空间,删除待释放内 存块节点。

27.根据权利要求26所述的一种内存分配的处理装置,其特征在于,所述装置还包括:

第一内存块排序模块,用于若所述新节点判断模块的判断结果为所述待释放内存块的空 闲内存与最大可分配内存不相等时,对所述内存池中内存块的空闲内存进行大小判断后将内 存块设置成按照空闲内存从大到小的顺序排序。

28.如权利要15-16、20-27中任意一项所述的一种内存分配的处理装置,其特征在于, 所述装置还包括:

内存池销毁模块,用于当检测到内存池的首个内存块指向下一个内存块的头部地址为 空,且所述首个内存块的空闲内存与所述内存块的最大可分配内存相等时,执行销毁所述内 存池,释放内存池空间。

说明书
技术领域

本申请涉及内存管理技术领域,特别涉及一种内存分配的处理方法及装置。

随着通信技术的发展,人们可以通过在终端与服务器之间建立网络连接,实现数据、信 息的交互传输。不仅如此,不同终端之间也可以采用数据传输的方式进行交互沟通,人们便 可以通过上述传输方式建立的互联网络获取所需的信息。

通常情况下,在互联网络中,当通讯双方有数据交互时,需要建立一个连接,数据传输 完成后,则断开此连接,即每次连接只完成一项业务的发送,这样的连接称为短连接。但是, 就不同终端而言,用户可能在短时间内进行多次通信,如:运行在终端系统中的具有联网功 能的程序或线程,可以向服务器端发起多次访问请求TCP(Transmission Control Protocol,传 输控制协议)连接。如果每次通信都是先连接,再传输的话,那么数据传输的处理速度必将 受到严重影响。同时,频繁的短连接创建,需要服务器端不断监听,并不断进行连接确认, 不仅增加服务器的工作负担,而且浪费了网络带宽资源。为解决上述TCP短连接的因频繁建 立和断开链路产生的效率问题,可以采用TCP长连接通讯方式代替短连接通讯,TCP长连接 可以在一个连接上可以连续发送多个数据包。虽然采用长连接的方式进行通信可以避免短时 间内重复的连接请求,但是,长连接一般是由终端建立,每一条长连接可以传输大量数据, 假设有大量请求连接的情况,服务器需要对外提供大批量的不间断的进行数据传输的长连 接。此时,需要一种可以灵活分配内存的方法,可以优化资源分配机制,减轻服务器的负担。

现有技术中,在长连接通讯过程中,服务器在接收到分配一定大小内存的请求时,可以 首先查内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先到的不小于 申请大小的内存块给请求者等)到合适大小的空闲内存块。如果该空闲内存块过大,还需 要切割成已分配的部分和较小的空闲块。然后服务器更新所述内存空闲块表,完成一次内存 分配。但是,在上述内存分配方法中,容易在分配后的空闲内存块中生成内存碎片,内存利 用率不高,并且,由于长连接通讯过程中需要频繁地调配内存,但是空闲内存块的物理地址 不连续,服务器在调用过程中需要花费较多的时间搜索可用空闲内存块,内存调配效率不高。

现有技术中长连接通信的内存分配处理方法在有大量请求连接的情况下服务器需要不 断的消耗资源进行计算,花费较多的时间搜索可用空闲内存块,并且容易在分配后的空闲内 存块中生成内存碎片,导致服务器系统内存利用率较低,内存分配效率低下。

本申请实施例的目的在于提供一种内存分配的处理方法及装置,可以减少内存分配的时 间,提高系统内存利用率,优化系统内存分配效率。

本申请实施例提供一种内存分配方法及装置是这样实现的:

一种内存分配的处理方法,所述方法可以包括:

获取内存申请信息,判断申请内存是否小于建立的内存池中内存块的最大可分配内存;

当判断所述申请内存大于所述最大可分配内存时,根据所述内存块数据头中记录的大块 内存信息,从大块内存中分配内存给申请内存;

否则,判断所述申请内存是否大于当前内存块的空闲内存,当判断所述申请内存小于当 前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述申请内存的需求;

若所述当前内存块的当前剩余空间满足所述申请内存的需求,从所述当前内存块的当前 剩余空间中分配内存给所述申请内存。

一种内存分配的处理装置,所述装置可以包括:

最大内存判断模块,用于获取内存申请信息,判断申请内存是否小于建立的内存池中内 存块的最大可分配内存;

大块内存分配模块,用于当所述最大内存判断模块判断所述申请内存大于所述最大可分 配内存时,根据所述内存块数据头中记录的大块内存信息,从大块内存中分配内存给申请内 存;

剩余空间判断模块,用于判断所述申请内存是否大于当前内存块的空闲内存,当判断所 述申请内存小于当前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述申 请内存的需求;

剩余空间分配模块,用于若所述剩余空间判断模块判断当前内存块的当前剩余空间满足 所述申请内存的需求时,从所述当前内存块的当前剩余空间中分配内存给所述申请内存。

本申请提供的内存分配的处理方法及装置,可以根据申请内存的大小分别从内存池或者 大块内存中分配内存,在内存池内存分配中又根据判断申请内存和空闲内存的大小分别分配 空闲内存或者新内存块,不仅可以满足申请内存空间的需求,还可以充分利用内存块的空间。 所述内存池有利于服务器对小内存空间的集中管理,尤其针对小内存空间频繁申请的线程, 可以从内存池中快速申请空间,并且大大减少内存碎片,空间利用率大大提高。

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术 描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记 载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以 根据这些附图获得其他的附图。

图1是本申请提供的内存分配处理方法的一种实施例的方法流程图示意图;

图2是本申请提供的内存块的一种实施例的结构示意图;

图3是本申请提供的申请内存大于空闲内存时的内存处理方法的一种实施例的流程图;

图4是本申请提供的建立新内存块的一种实施例的结构示意图;

图5是本申请提供的从空闲内存分配内存方法的一种实施例的流程图;

图6是本申请提供的内存释放内存的一种实施例的方法流程图;

图7是本申请提供的内存分配处理装置的一种实施例的模块结构示意图;

图8是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图;

图9是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图;

图10是本申请提供的剩余空间分配模块的一种实施例的模块结构示意图;

图11是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图;

图12是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图;

图13是本申请提供的已释放内存链表更新模块的另一种实施例的模块结构示意图。

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中 的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅 是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人 员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

下面结合附图对本申请所述的内存分配的处理方法进行详细的说明。图1是本申请提供 的内存分配的处理方法的一种实施例的方法流程图示意图。虽然本申请提供了如下述实施例 或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多 或者更少的操作步骤。在逻辑性上不存在必要因果关系的步骤中,这些步骤的执行顺序不限 于本申请实施例提供的执行顺序。所述方法在实际中的内存分配处理过程中或者装置执行 时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线 程处理的环境)。

具体的本申请提供的一种内存分配的处理方法的一种实施例如图1所示,所述方法可以 包括:

S1:获取内存申请信息,判断申请内存是否小于建立的内存池中内存块的最大可分配内 存。

在长连接进程中,一般会频繁地向服务器申请小内存空间,此时,服务器会在短时间内 连续接收到长连接进程发送的内存申请信息,所述内存申请信息可以是申请内存空间的大小 等信息。本申请实施例中,服务器可以在内存中建立内存池,所述内存池可以在此类小内存 空间申请频繁的进程中使用,直至所述进程完成。所述内存池可以是位于服务器内存中的预 先划分的内存空间。所述建立的内存池可以被设置成:

SS1:被划分成包括至少一个预设固定大小的包括数据头和数据存储区域的内存块;

SS2:内存池中的内存块被设置成按照内存块的空闲内存从大到小的顺序排列。

所述内存池中可以划分至少一个内存块,所述内存块的大小为预设值,比如10K、1M等。 当所述内存池中包括两个或者两个以上的内存块时,整个内存池中的内存块之间形成内存块 链表。图2是本申请提供的内存块的一种实施例的结构示意图,如图2所示,所述内存块可以 包括数据头和数据存储区,其中,所述数据存储区用于存储数据存储信息,所述数据头用于 存储数据头信息,所述数据头信息可以包括:

当前内存块首地址信息;

上一个内存块首地址信息、下一个内存块首地址信息;

未分配内存空间地址信息、空闲内存大小信息;

大块内存首地址信息、大块内存大小信息;

已释放内存空间地址信息、已释放内存大小信息。

其中,所述当前内存块首地址信息可以存储当前内存块的物理地址信息,比如当前内存 块的首地址“0X8049320”。如前所述,当所述内存池包括多个内存块时,内存块之间的物 理地址为连续的,所述上一个内存块首地址信息、下一个内存块首地址信息可以分别存储当 前内存块的上一个、下一个内存块的首地址信息。所述下一个内存块首地址可以是在当前内 存块首地址上偏移内存块的预设固定大小后得到的地址。如图2所示,内存块的空闲内存可 以包括未分配内存以及已释放内存,所述未分配内存为内存块中还未存储过任何数据信息的 数据存储区,所述已释放内存为内存块中已存储过数据,但是存储数据已经被标记为释放的 数据存储区。所述大块内存可以是在内存池之外的一个或者多个内存空间,本实施例中的大 块内存的内存空间不固定,一般大于内存块的最大可分配内存,所述最大可分配内存可以包 括内存块的已分配内存和可分配内存。当存在多个大块内存时,可以采用链表的形式将所述 多个大块内存串联起来,如图2所示,大块内存1的下一个内存地址指向大块内存2。所述大 块内存首地址信息可以存储内存池之外的大块内存的首地址信息,所述大块内存大小信息可 以存储相应的大块内存的内存空间信息,通过所述大块内存的首地址信息可以遍历可以申请 使用的大块内存,并了解对应的大块内存的内存大小。

在小内存空间申请使用较频繁的进程中,偶尔也会申请较大的内存,此时,内存池的内 存块已经不能满足进程申请内存的需求。本实施例中,可以通过判断申请内存是否小于内存 块的最大可分配内存,确定分配内存块内存还是大块内存。

S2:当判断所述申请内存大于所述最大可分配内存时,根据所述内存块的数据头中记录 的大块内存信息,从大块内存中分配内存给申请内存。

本实施例中的所述最大可分配内存一般是内存块的数据存储区的大小,一般情况下,所 述最大可分配内存大小为固定预设值。当判断结果为所述申请内存大于内存块的最大可分配 内存时,可以根据当前内存块的数据头中记录的大块内存信息,从所述大块内存中分配内存 给申请内存。所述数据头信息存储内存池外部可用的大块内存的地址和对应的大块内存的大 小信息。根据申请内存的大小,遍历所述大块内存,确定可以分配内存给申请内存的大块内 存,例如,大块内存首地址链表中第一个内存大于所述申请内存的大块内存。

需要说明的是,在将大块内存的部分内存分配给申请内存后,所述大块内存的内存空间 减少,所述大块内存的首地址也相应偏移。本实施例中,在所述从所述大块内存中分配内存 给申请内存之后,可以包括以下步骤:

更新所述大块内存的首地址;

将所述大块内存的首地址信息以及大小信息更新至所述内存池中内存块的数据头。

从内存池之外的大块内存分配申请内存,解决了内存池中小内存块偶尔不能满足申请内 存需求的问题。另外,在从大内存块分配内存后,将大内存块的地址和大小信息更新至每个 内存块中,可以保证内存块存储最新的大内存块地址和大小信息。

S3:否则,判断所述申请内存是否大于当前内存块的空闲内存,当判断所述申请内存小 于当前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述申请内存的需 求。

当判断结果为所述申请内存小于所述最大可分配内存时,可以确定在内存池中申请内 存。这里需要分两种情况,一种是所述申请内存小于当前内存块的空闲内存,另一种是所述 申请内存大于或等于当前内存块的空闲内存。上述两种不同情况下,分配内存的方式不同。

图3是本申请提供的申请内存大于空闲内存时的内存处理方法的一种实施例的流程图, 如图3所示,包括:

S11:当判断所述申请内存大于或等于当前内存块的空闲内存时,基于当前内存块数据 头记录的内存块链表依次在所述内存池中查空闲内存大于或等于所述申请内存的可用内 存块。

当所述当前内存块的空闲内存不能满足所述申请内存时,可以基于当前内存块数据头记 录的内存块链表信息在所述内存池中查下一块空闲内存大于或等于所述申请内存的可用 内存块。

在本申请的另一个实施场景中,当所述内存池中内存块的内存块链表被设置成按照内存 块的空闲内存从大到小的顺序排列时,可以基于当前内存块数据头记录的内存块链表信息判 断当前内存块的上一块内存块的空闲内存是否大于或等于所述申请内存。本实施例在已经排 序的内存块链表中查空闲内存大于或等于所述申请内存的可用内存块,可以节省可用内存 的查时间,提高查效率。

S12:相应地,若查到所述可用内存块,则所述判断当前内存块的当前剩余空间是否 满足所述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足所述申请内存的 需求。

若查到空闲内存大于或等于所述申请内存可用内存块,可以判断所述可用内存块的当 前剩余空间是否满足所述申请内存需求。

如图3所示,在本申请的另一个实施例中,所述方法还可以包括:

S21:若在所述内存池中未查到空闲内存大于或等于所述申请内存的可用内存块,则 在所述内存池中创建新内存块,以及使用所述新内存块为所述申请内存分配内存。

如果在所述内存池中没有查到空闲内存大于或等于所述申请内存的可用内存块时,可 以在所述内存池中创建新内存块,并使用所述新内存块为所述申请内存分配内存。本实施例 中的新内存块可以建立于所述内存池的末端,所述内存池的最后一个内存块指向所述新内存 块。图4是本申请提供的建立新内存块的一种实施例的结构示意图,如图4所示,在建立新内 存块时,首先将所述新内存块的数据存储区的部分内存分配给所述申请内存,再将剩余的部 分内存作为未分配内存,保证新内存块的最大可分配内存与其他的内存块的大小一致。所述 新内存块数据头中的大块内存首地址信息、大块内存大小信息可以复制前一个内存块的对应 存储信息。本实施中在创建新内存块的同时完成对所述申请内存的内存分配,减少操作步骤, 提高分配效率。

如图3所示,在本申请的另一个实施例中,所述方法还可以包括:

S31:基于内存块的数据头所指示的下一个内存块,依次比较内存池中内存块的空闲内 存与所述新内存块的空闲内存的大小,将所述新内存块的链表插入到所述内存池中空闲内存 大于所述新内存块的空闲内存的前一个内存块与空闲内存小于所述新内存块的空闲内存的 后一个内存块之间。

在本申请的另一个实施例中,当完成新内存块的建立和申请内存的内存分配后,可以将 所述新内存块在所述内存池中的相应位置插入,保证所述内存池中的内存块按照空闲内存的 从大到小排列,具体可以通过下述方式实现:依次比较内存池中内存块的空闲内存与所述新 内存块的空闲内存的大小,将所述新内存块的链表插入到前一个空闲内存大于、后一个空闲 内存小于所述新内存块的空闲内存的相邻内存块之间。

S4:若所述当前内存块的当前剩余空间满足所述申请内存的需求,从所述当前内存块的 当前剩余空间中分配内存给所述申请内存。

若所述当前内存块的当前剩余空间满足所述申请内存的需求,也就是当前内存块的当前 剩余空间大于或等于所述空闲内存时,可以从所述当前内存块的当前剩余空间中分配内存给 申请内存。具体地,图5是本申请提供的从空闲内存分配内存方法的一种实施例的流程图, 如图5所示,所述若所述当前内存块的当前剩余空间满足所述申请内存的需求,从所述当前 内存块的当前剩余空间中分配内存给所述申请内存可以包括:

S101:若所述当前内存块的当前剩余空间满足所述申请内存的需求,优先从当前内存块 的当前未分配内存空间分配内存给申请内存。

若所述当前内存块的当前剩余空间满足所述申请内存的需求时,可以优先从当前内存块 的当前未分配内存空间分配内存给申请内存。具体地,首先可以判断所述申请内存是否小于 或等于所述空闲内存中的未分配内存。

若所述申请内存小于或者等于所述空闲内存中的未分配内存,可以从所述未分配内存空 间分配内存给申请内存。所述未分配内存为内存块空闲内存中从未存储过数据的存储区,而 空闲内存块中的已释放内存虽然可以使用,但是所述已释放内存中保留着释放的存储数据, 若要在已释放内存中存储数据,需要先擦除所述存储数据,再分配存储空间。因此,在本实 施例中,可以优先将所述空闲内存中的未分配内存分配给所述申请内存。

S102:若当前内存块的当前未分配内存不满足所述申请内存的需求,则从当前内存块数 据头记录的已释放内存的空间地址信息中查满足所述申请内存的需求的内存空间进行分 配。

若当前内存块的当前未分配内存不满足所述申请内存的空间大小,可以从当前内存块数 据头记录的已释放内存中查满足所述申请内存需求的内存空间进行分配。具体地,可以判 断所述空闲内存中的已释放内存中是否包含内存大于等于所述申请内存的已释放子内存。本 实施例中,由于内存的使用、释放是随机的,时间也不一致,因此,已释放内存一般是不连 续的,所述已释放内存可以包含多个已释放子内存。所述已释放子内存的内存大小一般也是 不相同的,可以从已释放内存中搜索是否包含内存大于等于所述申请内存的已释放子内存。

需要说明的是,当所述已释放内存包含多个已释放子内存时,所述已释放内存空间地址 信息可以包含多个已释放子内存的首地址信息。

如图5所示,在本申请的另一个实施例中,所述方法还可以包括:

S201:若未能从当前内存块数据头记录的已释放内存中查到满足所述申请内存需求的 内存空间,基于当前内存块数据头记录的地址信息依次在所述内存池中查空闲内存大于或 等于所述申请内存的可用内存块。

由于已释放子内存之间可以是不连续的,而申请内存需要是连续的内存空间,因此所述 已释放内存包含的已释放子内存可能均不能满足申请内存的需求。因此,当判断结果为所述 可用内存中的已释放内存中不包含内存大于或者等于所述申请内存的已释放子内存时,可以 基于当前内存块数据头记录的内存块链表在所述内存池中查下一块空闲内存大于或等于 所述申请内存的可用内存块。

S202:相应的,若查到所述可用内存块,则所述判断当前内存块的当前剩余空间是否 满足所述申请内存需求包括判断所述可用内存块的当前剩余空间是否满足所述申请内存的 需求。

如果查到所述可用内存块,可以判断所述可用内存块的当前剩余空间是否满足所述申 请内存需求。若所述可用内存块的当前剩余空间满足所述申请内存需求,可以重复步骤 S101-S102,若所述可用内存块的当前剩余空间不能满足所述申请内存需求,可以重复步骤 S11-S12,具体实施例方式在此不再赘述。

如图5所示,在本申请的另一个实施例中,所述方法还可以包括:

S301:若在所述内存池中未查到空闲内存大于或等于所述申请内存的可用内存块,则 在所述内存池中创建新内存块,以及使用所述新内存块为所述申请内存分配内存。

S301的实施方式可以参考S21的实施方式,在此不再赘述。

在本申请的另一个实施例中,可以对大块内存以及内存池中的内存块进行内存释放,图 6是本申请提供的内存释放内存的一种实施例的方法流程图,如图6所示,包括:

S1001:获取内存释放请求信息,判断释放内存是否大于所述最大可分配内存。

所述内存释放请求信息可以包括请求释放内存的地址信息和大小,由于内存池的内存分 配、释放和工作线程是同步存在,工作线程需要释放某块内存时,当然首先判断是不是内存 池中的内存块的内存。具体地可以首先判断释放内存是否大于所述最大可分配内存。

S1002:当判断结果为释放内存大于所述最大可分配内存时,根据所述内存释放请求信 息以及数据头记录的大块内存信息定位所述释放内存对应的大块内存的首地址。

当判断所述释放内存大于所述最大可分配内存时,可以确定请求释放的是大块内存。此 时,可以根据所述内存释放请求信息中的释放内存的地址信息以及数据头记录的大块内存信 息,在所述数据头中的大块内存首地址信息链接并定位到所述大块内存的首地址。

S1003:释放定位得到的大块内存的数据信息,删除内存块数据头中记录的大块内存地 址链表中所述释放内存对应的大块内存的首地址信息。

在定位到所述大块内存的首地址后,根据所述释放内存的大小信息释放定位得到的大块 内存的数据信息。当所述大块内存释放内存后,可以删除内存块数据头中记录的大块内存地 址链表中所述释放内存对应的大块内存的首地址信息,保持所述数据头记录的是最新的大块 内存地址信息。

如图6所述,在本申请的另一个实施例中,所述方法还可以包括:

S2001:当判断结果为释放内存小于所述最大可分配内存时,根据内存释放请求信息定 位所述释放内存在所述内存池对应的待释放内存块中的地址,并释放所述待释放内存块的所 述释放内存的内存空间。

当判断所述释放内存小于所述最大可分配内存时,可以根据所述内存释放请求信息中的 地址信息定位所述释放内存在所述内存池对应的待释放内存块中的地址,并释放所述待释放 内存块的所述释放内存的内存空间。

S2002:获取所述待释放内存块释放内存后生成的已释放内存的内存空间地址,将所述 内存空间地址插入到所述待释放内存块数据头记录的已释放内存的空间地址信息中。

在定位到所述释放内存在所述内存池中的待释放内存块中的地址,可以将所述定位得到 的释放内存划分为已释放内存。需要说明的是,由于内存池中的内存块是预设大小的,内存 块中的内存不能像大块内存中的存储信息一样被服务器擦除,只能被覆盖,因此,所述待释 放内存可以被标记为已释放内存,等下次利用所述已释放内存时,可以对所述已释放内存中 的存储信息进行覆盖。

在本实施例中,所述将所述内存空间地址插入到所述待释放内存块数据头记录的已释放 内存的空间地址信息中可以包括:

判断所述内存空间地址所在的当前节点,与所述当前节点的前一个节点和当前节点后一 个节点是否为连续内存;

若判断的结果为是连续内存,则将所述当前节点、所述当前节点的前一个节点、所述当 前节点的后一个节点合并为一个连续内存的新节点记录到所述待释放内存块数据头记录的 已释放内存的空间地址信息中;否则,将所述内存空间地址作为新节点插入到所述待释放内 存块数据头记录的已释放内存的空间地址信息中。

本实施例中的当前节点是指当前释放内存,所述前一个节点、后一个节点分别指所述释 放内存的前一个已释放内存和后一个释放内存。通过检查当前释放空间的地址是否与相邻已 释放空间重复,若重复,将当前释放空间与相邻已释放空间合并成一个连续的已释放空间, 可以方便在后续可以查到准确的已释放空间的信息。

如图6所述,在本申请的另一个实施例中,所述方法还可以包括:

S3001:判断所述新节点是否位于内存池的首个内存块,若所述新节点不是位于内存池 的首个内存块,则判断所述待释放内存块的空闲内存与最大可分配内存是否相等;

S3002:若判断的结果为所述待释放内存块的空闲内存与最大可分配内存相等时,释放 所述待释放内存块的数据存储区域内存空间,删除待释放内存块节点。

当所述新节点是内存池的首个内存块时,内存释放流程结束。当所述新节点位于内存池 的节点内存块中时,可以判断所述待释放内存块的空闲内存块与最大可分配内存是否相等。 当所述待释放内存块的空闲内存与最大可分配内存相等时,可以确定在本次内存释放之后, 该内存块的内存处于闲置状态。此时,可以将所述释放内存块的数据存储区的空间释放,并 删除所述待释放内存块节点,即,例如将所述待释放内存块K的前一个内存块K-1中指向下 一个内存块的地址设置为指向所述待释放内存块K的下一个内存块K+1。

如图6所述,在本申请的另一个实施例中,所述方法还可以包括:

S4001:若判断的结果为所述待释放内存块的空闲内存与最大可分配内存不相等时,对 所述内存池中内存块的空闲内存进行大小判断后将内存块设置成按照空闲内存从大到小的 顺序排序。

当所述释放内存块的空闲内存与最大可分配内存不相等,可以对所述内存池中内存块的 空闲内存进行大小判断后将内存块设置成按照空闲内存从大到小的顺序排序,保证内存池中 内存块的空闲内存按照从大到小顺序排列。

在本申请的实施例中,当检测到内存池的首个内存块指向下一个内存块的头部地址为空 时,且所述首个内存块的空闲内存与所述内存块的最大可分配内存相等时,执行销毁所述内 存池,释放内存池空间。

本申请提供的内存分配的处理方法,可以根据申请内存的大小分别从内存池或者大块内 存中分配内存,在内存池内存分配中又根据判断申请内存和空闲内存的大小分别分配空闲内 存或者新内存块,不仅可以满足申请内存空间的需求,还可以充分利用内存块的空间。所述 内存池有利于服务器对小内存空间的集中管理,尤其针对小内存空间频繁申请的线程,可以 从内存池中快速申请空间,并且大大减少内存碎片,空间利用率大大提高。

本申请另一方面还提供一种内存分配装置,图7是本申请提供的内存分配的处理装置的 一种实施例的模块结构示意图,如图7所示,所述装置70可以包括:

最大内存判断模块71,用于获取内存申请信息,判断申请内存是否小于建立的内存池中 内存块的最大可分配内存;

大块内存分配模块72,用于当所述最大内存判断模块判断所述申请内存大于所述最大可 分配内存时,根据所述内存块数据头中记录的大块内存信息,从大块内存中分配内存给申请 内存;

剩余空间判断模块73,用于判断所述申请内存是否大于当前内存块的空闲内存,当判断 所述申请内存小于当前内存块的空闲内存时,判断当前内存块的当前剩余空间是否满足所述 申请内存的需求;

剩余空间分配模块74,用于若所述剩余空间判断模块判断当前内存块的当前剩余空间满 足所述申请内存的需求时,从所述当前内存块的当前剩余空间中分配内存给所述申请内存。

需要说明的是,本实施例中的所述建立的内存池可以被设置成:

被划分成包括至少一个预设固定大小的包括数据头和数据存储区域的内存块;

内存池中内存块被设置成按照内存块的空闲内存从大到小的顺序排列。

图8是本申请提供的内存分配装置的另一种实施例的模块结构示意图,如图8所示,装 置80还可以包括:

第一剩余内存块查模块81,用于当所述剩余空间判断模块判断所述申请内存大于或等 于当前内存块的空闲内存时,基于当前内存块数据头记录的内存块链表依次在所述内存池中 查空闲内存大于或等于所述申请内存的可用内存块;

第一剩余内存块判断模块82,用于若查到所述可用内存块,则所述判断当前内存块的 当前剩余空间是否满足所述申请内存需求包括判断所述可用内存块的当前剩余空间是否满 足所述申请内存的需求。

图9是本申请提供的内存分配装置的另一种实施例的模块结构示意图,如图9所示,装 置90还可以包括:

第一新内存块创建模块91,用于若在所述内存池中未查到空闲内存大于或等于所述申 请内存的可用内存块,则在所述内存池中创建新内存块,以及使用所述新内存块为所述申请 内存分配内存。

第一内存块排序模块92,用于基于内存块的数据头所指示的下一个内存块,依次比较内 存池中内存块的空闲内存与所述新内存块的空闲内存的大小,将所述新内存块的链表插入到 所述内存池中空闲内存大于所述新内存块的空闲内存的前一个内存块与空闲内存小于所述 新内存块的空闲内存的后一个内存块之间。

图10是本申请提供的剩余空间分配模块74的一种实施例的模块结构示意图,在本申请 的一个实施例场景中,所述剩余空间分配模块74可以包括:

未分配内存分配模块101,用于若所述当前内存块的当前剩余空间满足所述申请内存的 需求,优先从当前内存块的当前未分配内存空间分配内存给申请内存;

已释放内存分配模块102,用于若当前内存块的当前未分配内存不满足所述申请内存的 需求,则从当前内存块数据头记录的已释放内存的空间地址信息中查满足所述申请内存的 需求的内存空间进行分配。

如图10所示,在本申请另一个实施例中,所述剩余空间分配模块74还可以包括:

第二剩余内存块查模块103,用于若未能从当前内存块数据头记录的已释放内存中查 到满足所述申请内存需求的内存空间,基于当前内存块数据头记录的地址信息依次在所述 内存池中查空闲内存大于或等于所述申请内存的可用内存块;

第二剩余内存块判断模块104,用于若查到所述可用内存块,则判断所述可用内存块 的当前剩余空间是否满足所述申请内存需求。

如图10所示,在本申请另一个实施例中,所述剩余空间分配模块74还可以包括:

第二新内存块创建单元105,用于当第二剩余内存块判断模块判断结果为在所述内存池 中未查到空闲内存大于或等于所述申请内存的可用内存块,则在所述内存池中创建新内存 块,以及使用所述新内存块为所述申请内存分配内存。

图11是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图,如图11所 示,装置110还可以包括:

释放内存判断模块1101,用于获取内存释放请求信息,判断释放内存是否大于所述最大 可分配内存;

大块内存定位模块1102,用于当所述释放内存判断单元的判断结果为释放内存大于所述 最大可分配内存时,根据所述内存释放请求信息以及数据头记录的大块内存信息定位所述释 放内存对应的大块内存的首地址;

大块内存释放模块1103,用于释放定位得到的大块内存的数据信息,删除内存块数据头 中记录的大块内存地址链表中所述释放内存对应的大块内存的首地址信息。

图12是本申请提供的内存分配处理装置的另一种实施例的模块结构示意图,如图12所 示,装置120还可以包括:

释放内存定位模块1201,用于当释放内存判断单元的判断结果为释放内存小于所述最大 可分配内存时,根据内存释放请求信息定位所述释放内存在所述内存池对应的待释放内存块 中的地址,并释放所述待释放内存块的所述释放内存的内存空间;

已释放内存链表更新模块1202,用于获取所述待释放内存块释放内存后生成的已释放内 存的内存空间地址,将所述内存空间地址插入到所述待释放内存块数据头记录的已释放内存 的空间地址信息中。

图13是本申请提供的已释放内存链表更新模块的另一种实施例的模块结构示意图,如 图13所示,已释放内存链表更新模块1202可以包括:

连续内存判断模块1301,用于判断所述内存空间地址所在的当前节点,与所述当前节点 的前一个节点和当前节点后一个节点是否为连续内存;

内存合并模块1302,用于若所述连续内存判断模块的判断结果为是连续内存,则将所述 当前节点、所述当前节点的前一个节点、所述当前节点的后一个节点合并为一个连续内存的 新节点记录到所述待释放内存块数据头记录的已释放内存的空间地址信息中;否则,将所述 内存空间地址作为新节点插入到所述待释放内存块数据头记录的已释放内存的空间地址信 息中。

如图13所示,在本申请另一个实施例中,所述已释放内存链表更新模块1202还可以包 括:

新节点判断模块1303,用于判断所述新节点是否位于内存池的首个内存块,若所述新节 点不是位于内存池的首个内存块,则判断所述待释放内存块的空闲内存与最大可分配内存是 否相等;

节点释放模块1304,用于若所述新节点判断模块的判断结果为所述待释放内存块的空闲 内存与最大可分配内存相等时,释放所述待释放内存块的数据存储区域内存空间,删除待释 放内存块节点。

如图13所示,在本申请另一个实施例中,所述已释放内存链表更新模块1202还可以包 括:

第一内存块排序模块1305,用于若所述新节点判断模块的判断结果为所述待释放内存块 的空闲内存与最大可分配内存不相等时,对所述内存池中内存块的空闲内存进行大小判断后 将内存块设置成按照空闲内存从大到小的顺序排序。

在本申请的一个实施例中,所述装置还包括:

内存池销毁模块,用于当检测到内存池的首个内存块指向下一个内存块的头部地址为 空,且所述首个内存块的空闲内存与所述内存块的最大可分配内存相等时,执行销毁所述内 存池,释放内存池空间。

本申请提供的内存分配的处理装置,可以根据申请内存的大小分别从内存池或者大块内 存中分配内存,在内存池内存分配中又根据判断申请内存和空闲内存的大小分别分配空闲内 存或者新内存块,不仅可以满足申请内存空间的需求,还可以充分利用内存块的空间。所述 内存池有利于服务器对小内存空间的集中管理,尤其针对小内存空间频繁申请的线程,可以 从内存池中快速申请空间,并且大大减少内存碎片,空间利用率大大提高。

尽管本申请内容中提到内存池内存块的划分方式、内存块及内存空间的地址信息记录方 式等之类的内存信息数据设置、存储、删除方式描述,但是,本申请并不局限于必须是完全 符合行业或某种计算机语言执行标准或实施例所描述的情况。某些标准化的计算机语言或实 施例描述的基础上略加修改后的实施方案也可以实行上述实施例相同、等同或相近、或变形 后可预料的实施效果。当然,即使不采用上数据处理、判断的方式,只要符合本申请上述各 实施例的内存数据处理、信息交互和信息判断反馈方式,仍然可以实现相同的申请,在此不 再赘述。

虽然本申请提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的 手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序 中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实 施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。

上述实施例阐明的模块、装置或模块,具体可以由计算机芯片或实体实现,或者由具 有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。 当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将 实现同一功能的模块由多个子模块或子模块的组合实现。

本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以 通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控 制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部 件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至, 可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的 结构。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。 一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、 数据结构、类等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位 于包括存储设备在内的本地和远程计算机存储介质中。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软 件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说 对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在 存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以 是个人计算机,移动终端,服务器,或者网络设备等)执行本申请各个实施例或者实施例的 某些部分所述的方法。

本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相 参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本申请可用于众多通用或 专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设 备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的电子设备、网络 PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而 不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

本文发布于:2023-04-13 04:21:59,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/4/85660.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图