一种内存分配方法及装置制造方法及图纸

技术编号:4014293 阅读:270 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种内存分配方法及装置,其中,所述方法包括:程序启动时,向操作系统请求预置大小的内存空间;将所述内存空间划分为多个内存块,并将每个内存块划分为多个内存槽;保存各内存槽的大小及未使用内存槽的起始地址信息;当进程请求内存时,根据请求的内存大小获取符合预置条件的内存槽,并分配给该进程。通过本发明专利技术,能够减少向操作系统申请或释放内存的次数,减轻系统的负担,以适当的空间冗余,提升程序的运行效率。

【技术实现步骤摘要】

本专利技术涉及内存管理
,特别是涉及一种内存分配方法及装置
技术介绍
内存(Memory)也被称为内存储器,其作用是用于暂时存放 CPU(CentralProcessing Unit,中央处理单元)中的运算数据,以及与硬盘等外部存储器交 换的数据。内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有 程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。在程序运行过程中,会不断地进行内存的申请及释放。现有技术中,是由操作系统 采用一定的内存分配策略向各个程序分配内存。例如,常用的分配策略包括首次拟合法、最 佳拟合法以及最差拟合法等等。但是在实际应用中,多次地向操作系统申请或释放内存,会 严重地加重系统的负担,最终导致程序的运行效率下降。
技术实现思路
本专利技术提供一种内存分配方法及装置,能够减少向操作系统申请或释放内存的次 数,减轻系统的负担,以适当的空间冗余,提升程序的运行效率。本专利技术提供了如下方案一种内存分配方法,包括程序启动时,向操作系统请求预置大小的内存空间;将所述内存空间划分为多个内存块,并将每个内存块划分为多个内存槽;保存各内存槽的大小及未使用内存槽的起始地址信息;当进程请求内存时,根据请求的内存大小获取符合预置条件的内存槽,并分配给 该进程。优选的,还包括保存内存槽的数目和/或重用内存槽地址信息。优选的,一个内存块中各内存槽的大小相等。优选的,所述根据请求的内存大小获取符合预置条件的内存槽,并分配给该程序 包括搜索大于所述请求的内存大小的最小内存槽;确定所述最小内存槽所在的目标内存块;在所述目标内存块中搜索可用的内存槽,将所述可用的内存槽分配给该进程。优选的,所述进程请求内存的访问模式包括有名访问,所述进程请求内存时,请求 消息中还包括名称键值;所述获取到符合预置条件的内存槽之后还包括用所述请求消息中的名称键值对所述符合预置条件的内存槽进行命名;将所述名称键值与该内存槽的地址通过哈希方法建立映射关系。优选的,还包括对所述请求的内存空间进行管理,提供内存使用、内存泄露和/或内存跟踪信息。一种内存分配装置,包括请求单元,用于程序启动时,向操作系统请求预置大小的内存空间;预分配单元,用于将所述内存空间划分为多个内存块,并将每个内存块划分为多 个内存槽;保存单元,用于保存各内存槽的大小及未使用内存槽的起始地址信息;分配单元,用于当进程请求内存时,根据请求的内存大小获取符合预置条件的内 存槽,并分配给该进程。优选的,所述保存单元还用于保存内存槽的数目和/或重用内存槽地址信息。优选的,一个内存块中各内存槽的大小相等。优选的,所述分配单元包括内存槽搜索子单元,用于搜索大于所述请求的内存大小的最小内存槽;内存块确定子单元,用于确定所述最小内存槽所在的目标内存块;内存槽分配子单元,用于在所述目标内存块中搜索可用的内存槽,将所述可用的 内存槽分配给该进程。优选的,所述进程请求内存的访问模式包括有名访问,所述进程请求内存时,请求 消息中还包括名称键值;还包括命名单元,用于所述获取到符合预置条件的内存槽之后,用所述请求消息中的名 称键值对所述符合预置条件的内存槽进行命名;映射单元,用于将所述名称键值与该内存槽的地址通过哈希方法建立映射关系。优选的,还包括内存管理单元,用于对所述请求的内存空间进行管理,提供内存使用、内存泄露和 /或内存跟踪信息。根据本专利技术提供的具体实施例,本专利技术公开了以下技术效果本专利技术在程序启动时,向操作系统申请大的内存空间;然后可以对该内存空间进 行预分配,即将所述内存空间划分为多个内存块,并将每个内存块划分为多个内存槽;保存 各内存槽的大小及未使用内存槽的起始地址信息;当有进程申请内存时,根据申请的内存 大小获取符合预置条件的内存槽,并分配给该程序。这样,相当于实现了进程对内存的自行 分配,即只需要在启动时向操作系统申请一块内存空间,在进行运行过程中,需要申请或释 放内存时,都可以不再需要向操作系统发起请求,而是直接由进程进行分配,因此,能够减 少向操作系统申请或释放内存的次数,减轻系统的负担。其次,由于对内存进行了预分配,以内存槽为单位向进程进行内存的分配,因此, 在向进程分配内存的过程中,不会产生内存碎片,可以提高处理效率,相当于以适当的空间 冗余,提升程序的运行效率。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例中所 需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施 例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例提供的方法的流程图;图2是本专利技术实施例进行内存预分配的示意图;图3是本专利技术实施例提供的装置的示意图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于 本专利技术中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本专利技术保护的 范围。参见图1,本专利技术实施例提供的内存分配方法包括以下步骤S101 程序启动时,向操作系统申请预置大小的内存空间;需要说明的是,现有技术中,一个程序在开始运行之后,当前需要多大的内存就向 操作系统申请多大的内存,操作系统根据当前的内存占用情况,选择相应的内存空间给该 进程。但是,在本专利技术实施例中,在程序开始运行之后,首先会向操作系统申请一块大的 内存空间,该内存空间大于当前所需的内存。具体的,该足够大的内存空间可以是根据预先 根据具体的应用场景设定的阈值来确定的,在程序的初始化过程中,就可以将该阈值传递 进来,并按照该阈值向操作系统进行申请内存空间。S102 将所述内存空间划分为多个内存块,并将每个内存块划分为多个内存槽;本专利技术实施例相当于存在一个对内存进行预分配的过程,即在申请到相对较大的 内存空间之后,首先将其划分为多个内存块,然后再将每个内存块划分为多个内存槽。也就 是说,在程序进行具体的内存请求之前已经对申请到的内存空间进行了划分。其中,各个内存块的大小可以不同,但为了便于进行分配,一个内存块中划分的各 个内存槽的大小可以是相等的。例如,具体的划分可以如图2所示。这里需要说明的是,现有技术中可能也存在内存块的概念,但是与本专利技术实施例 中的内存块的形成过程是不同的,为避免造成混淆,同时,为了说明现有技术中内存碎片的 概念,这里进行简要地说明。由前文所述,本专利技术实施例中,内存块是在对内存空间进行预分配时产生的,与具 体的内存请求无关。但是,在现有技术中,并没有对内存进行预分配的过程,操作系统在接 收到某内存请求时,根据请求的内存大小以及内存的占用情况进行分配。假设进程A请求 的内存大小是10M,则操作系统会在内存中选择同样为10M的内存空间分配给该进程,此 时,操作系统选择的这10M的内存空间被称为一个内存块a,当进程A将这10M的内存释放 之后,该内存块a就成为空闲的内存空间,即该内存块a可以分配给其他的进程。例如某进 程B请求的内存大小为8M,此时根据内存分配策略,就可能会从该内存块a中选择8M的内 存分配给进程B。此时原内存块a中还有2M的内存空闲(假设该过程本文档来自技高网...

【技术保护点】
一种内存分配方法,其特征在于,包括:程序启动时,向操作系统请求预置大小的内存空间;将所述内存空间划分为多个内存块,并将每个内存块划分为多个内存槽;保存各内存槽的大小及未使用内存槽的起始地址信息;当进程请求内存时,根据请求的内存大小获取符合预置条件的内存槽,并分配给该进程。

【技术特征摘要】

【专利技术属性】
技术研发人员:田欢春宋仁春
申请(专利权)人:恒生电子股份有限公司
类型:发明
国别省市:86[中国|杭州]

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

1