一种内存管理方法及系统转让专利

申请号 : CN201510159220.3

文献号 : CN104778125B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 赵如奇

申请人 : 无锡天脉聚源传媒科技有限公司

摘要 :

本发明公开了一种内存管理方法及系统,用以高效合理地分配内存,提高处理效率。所述方法包括:将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。该方案高效合理地分配内存,提高了处理效率的目的,且其大大提升了内存利用率和系统性能。

权利要求 :

1.一种内存管理方法,其特征在于,包括:

将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;

接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;

检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级;

所述接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,包括:接收包含内存需求的网络数据包;

检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块;

在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;

将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用;

所述根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,还包括:在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;

在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;

提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;

将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。

2.如权利要求1所述的方法,其特征在于,所述将内存预先划分为多个内存分区,并将各所述内存分区分别分配为多个不同量级的内存块,包括:根据需要将内存预先划分为多个相同/不同大小的内存分区;

将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。

3.如权利要求1所述的方法,其特征在于,所述根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,还包括:在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;

在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;

提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;

将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。

4.一种内存管理系统,其特征在于,包括:

内存分配模块,用于将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;

内存地址分配模块,用于接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;

量级调整模块,用于检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级;

所述内存地址分配模块包括:

数据包接收子模块,用于接收包含内存需求的网络数据包;

第一检测子模块,用于检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块;

内存地址提取子模块,用于在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;

第一内存地址分配模块,用于将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用;

所述内存地址分配模块还包括:

第二检测子模块,用于在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;

第二内存分配子模块,用于在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;

第二内存地址分配子模块,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。

5.如权利要求4所述的系统,其特征在于,所述内存分配模块包括:

分区子模块,用于根据需要将内存预先划分为多个相同/不同大小的内存分区;

第一内存分配子模块,用于将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。

6.如权利要求4所述的系统,其特征在于,所述内存地址分配模块还包括:第三检测子模块,用于在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;

第三内存分配子模块,用于在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;

第三内存地址分配子模块,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。

说明书 :

一种内存管理方法及系统

技术领域

[0001] 本发明涉及互联网技术领域,特别涉及一种内存管理方法及系统。

背景技术

[0002] 随着互联网技术的发展,计算机领域内的数据量及数据处理需求不断提升,且负载对于系统性能的要求越来越高。从实时性的角度来讲,要求内存分配的过程要尽可能地快,但是在数据量大的情况下,内存分配的效率必然会受到影响;同时,因为内存是一种有限的资源,且由于系统硬件环境空间有限,内存分配还要求高效,因此在内存分配的过程中需要尽量减少浪费;因此,业界急需提出一种高效且处理效率高的内存管理办法,使其可以有效实现上述要求。

发明内容

[0003] 本发明提供一种内存管理方法及系统,用以高效合理地分配内存,提高了处理效率,提升了内存利用率和系统性能。
[0004] 根据本发明实施例的第一方面,提供一种内存管理方法,包括:
[0005] 将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;
[0006] 接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;
[0007] 检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。
[0008] 在一个实施例中,所述将内存预先划分为多个内存分区,并将各所述内存分区分别分配为多个不同量级的内存块,包括:
[0009] 根据需要将内存预先划分为多个相同/不同大小的内存分区;
[0010] 将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。
[0011] 在一个实施例中,所述接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,包括:
[0012] 接收包含内存需求的网络数据包;
[0013] 检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块;
[0014] 在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;
[0015] 将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0016] 在一个实施例中,所述根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,还包括:
[0017] 在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0018] 在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0019] 提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0020] 在一个实施例中,所述根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址,还包括:
[0021] 在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0022] 在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0023] 提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0024] 根据本发明实施例的第二方面,还提供一种内存管理系统,包括:
[0025] 内存分配模块,用于将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;
[0026] 内存地址分配模块,用于接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;
[0027] 量级调整模块,用于检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。
[0028] 在一个实施例中,所述内存分配模块包括:
[0029] 分区子模块,用于根据需要将内存预先划分为多个相同/不同大小的内存分区;
[0030] 第一内存分配子模块,用于将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。
[0031] 在一个实施例中,所述内存地址分配模块包括:
[0032] 数据包接收子模块,用于接收包含内存需求的网络数据包;
[0033] 第一检测子模块,用于检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块;
[0034] 内存地址提取子模块,用于在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;
[0035] 第一内存地址分配模块,用于将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0036] 在一个实施例中,所述内存地址分配模块还包括:
[0037] 第二检测子模块,用于在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0038] 第二内存分配子模块,用于在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0039] 第二内存地址分配子模块,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0040] 在一个实施例中,所述内存地址分配模块还包括:
[0041] 第三检测子模块,用于在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0042] 第三内存分配子模块,用于在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0043] 第三内存地址分配子模块,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0044] 本发明实施例提供的技术方案可产生以下有益效果:将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。该方案通过预先分配不同量级的内存块,在网络数据包到来时,只需要直接分配与其内存需求匹配的内存块的内存地址即可,不需要再进行内存的分配,达到了高效合理地分配内存,提高处理效率的目的,且其大大提升了内存利用率和系统性能。
[0045] 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
[0046] 下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

[0047] 附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0048] 在附图中:
[0049] 图1为本发明根据一示例性实施例示出的内存管理方法的流程图;
[0050] 图2为本发明根据一示例性实施例示出的内存管理方法中步骤S10的实施方式流程图;
[0051] 图3为本发明根据一示例性实施例示出的内存管理方法中步骤S20的一种实施方式流程图;
[0052] 图4为本发明根据一示例性实施例示出的内存管理方法中步骤S20的另一种实施方式流程图;
[0053] 图5为本发明根据一示例性实施例示出的内存管理方法中步骤S20的又一种实施方式流程图;
[0054] 图6为本发明根据一示例性实施例示出的内存管理系统的框图;
[0055] 图7为本发明根据一示例性实施例示出的内存管理系统中内存分配模块61的框图;
[0056] 图8为本发明根据一示例性实施例示出的内存管理系统中一种内存地址分配模块62的框图;
[0057] 图9为本发明根据一示例性实施例示出的内存管理系统中另一种内存地址分配模块62的框图;
[0058] 图10为本发明根据一示例性实施例示出的内存管理系统中又一种内存地址分配模块62的框图。

具体实施方式

[0059] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
[0060] 本公开实施例提供了一种内存管理方法,用于高效合理地分配内存,提高了理效率,提升了存利用率和系统性能。如图1所示,该方法包括步骤S10-S30:
[0061] 在步骤S10中,将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块。
[0062] 其中,本公开中所述内存是指除操作系统所需内存之外的内存,且本公开所述内存主要针对网络数据;步骤S10中将内存预先划分为多个内存分区,该内存分区的大小可以根据用户的需要自行设定,多个所述内存分区的大小可以一样,也可以根据需要设置为不同大小;同时,将所述内存分区分别分配为多个不同量级的内存块,各个所述内存分区中的所述内存块的量级可以根据需要自行设定,可以设置为同样数量和级别的量级,也可以将各自量级的级别和数量设置得不一样,且各个量级的内存块的数量也可以根据需要设置,而不必限定于为某个数量。
[0063] 在一个实施例中,如图2所示,所述步骤S10可包括:
[0064] 步骤S101、根据需要将内存预先划分为多个相同/不同大小的内存分区。也即,所述内存分区的大小可以根据用户的需要自行设定,多个所述内存分区的大小可以一样,也可以根据需要设置为不同大小。
[0065] 步骤S102、将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。也即,可理解的,在本公开中,各个所述内存分区中的所述内存块的量级可以根据需要自行设定,可以设置为同样数量和级别的量级,也可以将各自量级的级别和数量设置得不一样,且各个量级的内存块的数量也可以根据需要设置,而不必限定于为某个数量。比如,在各内存分区大小一致的情况下,可以将每个所述内存分区都设置有
128字节、512字节、1024字节、1536字节的量级,且各内存分区中各量级的内存块的数量都一样,比如,各内存分区中均有100个128字节、50个512字节、50个1024字节、30个1536字节的内存块。也可以在各内存分区中独立自由配置内存块。且分配好的所述内存块的使用状态均标识为未使用。
[0066] 在步骤S20中,接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址。其中,本公开中所述网络数据包通常不超过所述内存块的最大量级;且所述网络数据包为以太网数据包。
[0067] 在一个实施例中,如图3所示,所述步骤S20可包括:
[0068] 步骤S201、接收包含内存需求的网络数据包;其中,本实施例中所述网络数据包通常不超过所述内存块的最大量级;且所述网络数据包为以太网数据包。且在接收到的网络数据包中包含该网络数据包的内存需求。
[0069] 步骤S202、检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块。也即,当在步骤S201中接收到网络数据包之后,应该为其分配内存,但是由于在步骤S10中已经分配好了内存,形成了各量级的内存块,因此只需要找到与所述网络数据包的内存需求匹配的量级的内存块即可,但是该内存块的内存容量必须大于或者等于所述网络数据包的内存需求,且两者之间的差值越小,对于内存的浪费越少。
[0070] 步骤S203、在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址。当找到与所述网络数据包的内存需求匹配的量级的内存块时,也即该内存块的内存容量大于或者等于所述网络数据包的内存需求时,由于内存块的内存容量与网络数据包的内存需求两者之间的差值越小,对于内存的浪费越少,因此,提取两者之间差值最小的内存块的内存地址。在该过程中,由于内存块已经分配好,已知所述内存块的地址,因此不需要重新分配内存便已知所述内存块的地址,只需要将所述内存块的内存地址分配给所述网络数据包即可,大大提高了处理效率。
[0071] 步骤S204、将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。也即,将所述内存地址分配给所述网络数据包后,所述内存块便已经被使用,此时需要将其标识为已使用状态。
[0072] 在一个实施例中,如图4所示,所述步骤S20还可包括:
[0073] 步骤S205、在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求。也即,当各内存分区中均不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,所述网络数据包没有可以被分配的内存块,此时需要为其重新分配一个与其匹配的内存块,因此首先检查当前内存分区中的剩余的未使用的内存块的总容量是否能大于或等于所述网络数据包的内存需求;如果满足上述条件,即可进行重新分配内存块。
[0074] 步骤S206、在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块。也即,当前内存分区已经满足重新分配的需求,则进行重新分配,且分配后起码包含一个与所述网络数据包的内存需求匹配的内存块。
[0075] 步骤S207、提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。也即,提取所述内存地址并将其分配给所述网络数据包后,所述内存块便已经被使用,此时需要将其标识为已使用状态。
[0076] 在一个实施例中,如图5所示,所述步骤S20还可包括:
[0077] 步骤S208、在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求。也即,在当前内存分区中剩余的未使用的内存块的总容量小于所述网络数据包的内存需求时,当前内存分区不满足进行重新分配内存块的条件,只能查询其他内存分区是否满足重新分配内存块并容纳所述网络数据包的条件。
[0078] 步骤S209、在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块。也即,若其他内存分区已经满足重新分配的需求,则进行重新分配,且分配后起码包含一个与所述网络数据包的内存需求匹配的内存块。可理解的,若其他内存分区均不满足重新分配的需求,此时,无法对所述网络数据包进行分配内存,此时需要警示用户内存不足。
[0079] 步骤S210、提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。也即,提取所述内存地址并将其分配给所述网络数据包后,所述内存块便已经被使用,此时需要将其标识为已使用状态。
[0080] 在步骤S30中,检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。
[0081] 也即,在进行内存管理的过程中,需要实时或者定时检测所述内存分区中不同量级的所述内存块的使用率,以根据所述使用率重新调整所述内存分区中的内存块的量级,也即,若某个量级的内存块使用率最高且该量级的数量已经达到预设阈值,此时,可以重新分配所述内存块,将使用率低且数量充足的其他量级的内存块减少,而增加使用率高且数量少的内存块的数量。
[0082] 本发明实施例提供的上述方法,将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。该方案通过预先分配不同量级的内存块,在网络数据包到来时,只需要直接分配与其内存需求匹配的内存块的内存地址即可,不需要再进行内存的分配,达到了高效合理地分配内存,提高处理效率的目的,且其大大提升了内存利用率和系统性能。
[0083] 对应本发明实施例提供的内存管理方法,本发明还提供内存管理系统,如图6所示,该系统可包括:
[0084] 内存分配模块61,用于将内存预先划分为多个内存分区,将所述内存分区分别分配为多个不同量级的内存块;
[0085] 内存地址分配模块62,用于接收包含内存需求的网络数据包,并根据所述网络数据包中包含的内存需求的大小为所述网络数据包分配所述内存块的内存地址;
[0086] 量级调整模块63,用于检测所述内存分区中不同量级的所述内存块的使用率,并根据所述使用率重新调整所述内存分区中的内存块的量级。
[0087] 在一个实施例中,如图7所示,所述内存分配模块61包括:
[0088] 分区子模块611,用于根据需要将内存预先划分为多个相同/不同大小的内存分区;
[0089] 第一内存分配子模块612,用于将所述内存分区分别分配为多个不同量级的内存块,并将所述内存块的使用状态标识为未使用;其中,所述内存块的不同量级为128字节或/和512字节或/和1024字节或/和1536字节。
[0090] 在一个实施例中,如图8所示,所述内存地址分配模块62包括:
[0091] 数据包接收子模块621,用于接收包含内存需求的网络数据包;
[0092] 第一检测子模块622,用于检测各内存分区中使用状态为未使用的所述内存块中,是否存在内存容量等于或大于所述网络数据包的内存需求的所述内存块;
[0093] 内存地址提取子模块623,用于在各内存分区中存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;
[0094] 第一内存地址分配模块624,用于将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0095] 在一个实施例中,如图9所示,所述内存地址分配模块62还包括:
[0096] 第二检测子模块625,用于在各内存分区中不存在内存容量等于或大于所述网络数据包的内存需求的所述内存块时,检测当前内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0097] 第二内存分配子模块626,用于在当前内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0098] 第二内存地址分配子模块627,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0099] 在一个实施例中,如图10所示,所述内存地址分配模块62还包括:
[0100] 第三检测子模块628,用于在当前内存分区中所有内存块的总内存容量小于所述网络数据包的内存需求时,检测其他内存分区中使用状态为未使用的所有内存块的总内存容量是否等于或大于所述网络数据包的内存需求;
[0101] 第三内存分配子模块629,用于在其他内存分区中所有内存块的总内存容量等于或大于所述网络数据包的内存需求时,将其他所述内存分区的未使用内存块重新分配为不同量级的内存块,且重新分配后的所述内存块中至少包含一个所属量级的内存容量与所述网络数据包的内存需求之间差值最小的内存块;
[0102] 第三内存地址分配子模块630,用于提取内存容量与所述网络数据包的内存需求之间差值最小的所述内存块的内存地址;将提取的所述内存地址分配给所述网络数据包后,将提取内存地址的所述内存块的使用状态标识为已使用。
[0103] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0104] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0105] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0106] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0107] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。