3708 2009,30
(
16
)
计算机工程与设计 Computer Engineering and Design
0 引 言
随着计算机硬件的发展和软件需求的增长,软件规模变
得越来越庞大,从而对计算机内存的需求也变得越来越高。
在软件开发的过程中,如何高效的管理大量的内存、防止内存
泄漏、防止越界访问,以及如何提高内存的有效利用率已经成
为影响软件质量的重要因素,因此良好的内存管理机制显得
非常重要
[
1
]
。
本文将探讨 Windows 下的一种高效的动态内存管理机
制。与传统的动态内存管理机制相比较,文中提到的动态内
存管理机制减少了内存申请与释放的时间耗费,减少了内存
碎片,从而提高了动态内存管理的效率。
1 传统动态内存管理机制
32 位 Windows 环境中的进程都至少有一个堆,叫做缺省
堆。Win32 子系统和 C 的运行时库都从该缺省堆中动态分配
空间。在 C/C++中,用 malloc/free 或 new/delete 来申请或释放
动态内存,而它们最终都是通过 Windows 的堆内存管理来实
现的。堆管理是 Windows 系统内存管理的核心部分,是 Win-
dows提供的一种内存管理机制,且主要用来分配小的数据块。
通过调用 C 的 malloc
()
函数或者 C++的 new 运算符来动
态申请内存,其最终都将调用 NTDLL. DLL 中的 RtlAllocate-
Heap 从 Windows 内存堆中进行内存的实际分配。通过调用 C
的 free
()
函数或者 C++的 delete 运算符来动态释放内存,其最
终也都是调用 NTDLL.DLL 中的 RtlFreeHeap 对从系统内存堆
中申请的内存进行回收
[
2
]
。
分析文献
[
2
]
中提到的Windows下的堆内存管理机制的时
间效率。申请内存时,考虑到需要对空闲块进行分割,则申请
内存的时间耗费约等于在空闲块链表中顺序查找到合适大小
的空闲块的时间耗费加上将分割后的空闲块插入到空闲块链
表中适当位置上的时间耗费;释放内存时,考虑到需要对空闲
块进行合并,则释放内存块的时间耗费约等于将合并后的空
闲块插入到空闲块链表中适当位置上的时间耗费。
为了使分析更具一般性,这里使用需要遍历链表节点的
平均个数来衡量内存申请与释放的时间效率。定义:记 为空
闲内存块链表的长度,则顺序查找到空闲内存块链表的某一
收稿日期:
2008-09-03
;修订日期:
2008-12-06
。
作者简介:魏海涛
(
1979
-
)
,男,陕西西安人,硕士研究生,研究方向为图形图像处理与网络技术; 姜昱明
(
1949
-
)
,男,陕西延安人,副教
授,硕士生导师,研究方向为图形图像处理与网络技术; 李建武
(
1983
-
)
,男,陕西西安人,硕士研究生,研究方向为图形图像处理与网络技
术; 张娅
(
1979
-
)
,女,河南固始人,助理工程师,研究方向为图形图像处理。
E-mail
:
whtlszy@126.com
内存管理机制的高效实现研究
魏海涛
1
, 姜昱明
1
, 李建武
1
, 张 娅
2
(
1. 西安电子科技大学 计算机学院,陕西 西安 710071;2. 96425 部队,陕西 宝鸡 721006
)
摘 要:为了高效地管理内存,防止内存泄漏、越界访问等问题的出现,在分析传统动态内存管理机制的基础上,提出了一
种基于 Windows 虚拟内存管理的高效动态内存管理机制。通过创建内存管理器来维护虚拟地址空间和处理内存申请和释放
请求,改进了传统动态内存分配与回收算法,并在 VC++6.0 开发平台上实现了该动态内存管理机制。测试结果分析表明,该
方法有效降低了申请与释放内存的时间耗费,减少了内存碎片的产生,提高了动态内存管理效率。
关键词:内存管理; 堆; 分配算法; 回收算法; 内存池
中图法分类号:TP311 文献标识码:A 文章编号:1000-7024
(
2009
)
16-3708-05
Research of high efficient implementation of memory management mechanism
WEI Hai-tao
1
, JIANG Yu-ming
1
, LI Jian-wu
1
, ZHANG Ya
2
(
1. Collegeof Computer Engineering, Xidian University, Xi’an 710071, China; 2. 96425Unitof PLA, Baoji721006, China
)
Abstract:Having analyzed the traditional dynamic memory management, an efficient dynamic memory management method based on
Windows virtual memory mechanism is presented aiming to both manage memory efficiently, and avoid the problem of memory leak and
access violation. The virtual address space and memory allocation and release are managed by a memory manager. The method improves
the traditional memory allocation and release algorithm. And memory management mechanism is implemented on the VC++ 6.0 develo-
pment platform. Analysis of test results shows that the method shortens the time consumption of memory allocation and release, reduces
generated memory fragments, and improves dynamic memory management efficiency.
Key words:memory management; heap; allocation algorithm; free algorithm; memory pool
计算机工程与设计 Computer Engineering and Design
体系结构与外围设备
DOI:10.16208/j.issn1000-7024.2009.16.016
评论0