当前位置:鱼C工作室 >Win32汇编 > 查看文章

内存管理1 – Win32汇编语言054

内存管理1

 

让编程改变世界

Change the world by program


 

内存管理基础

 

Win32 中的内存管理是分层次的,系统提供了几组层次不同的函数来管理内存,它们是标准内存管理函数、堆管理函数、虚拟内存管理函数和内存映射文件函数。

所有的这些函数都是为了让用户能在比较高的层次上方便地管理内存,以便将程序和底层的内存分页机制隔离开来。

 

图说内存:

Windows的内存分层管理

 

虚拟内存管理函数

 

Windows 使用一个以页为基础的虚拟内存系统,与分页有关的概念已经在该系列教程刚开始几个讲中有所介绍,虽然那时候大家还懵懵懂懂。

Windows 充分利用了 80×86 处理器保护模式下的线性寻址机制和分页机制,这些机制是 Win32 内存管理的基础。

Win32 提供了一组虚拟内存管理函数来管理虚拟内存,主要用于保留/提交/释放虚拟内存,在虚拟内存页上改变保护方式,锁定虚拟内存页以及查询一个进程的虚拟内存等操作,这是一组位于底层的函数。

 

堆管理函数

 

堆管理函数相对比较高级一点,堆的主要功能就是有效地管理内存和进程的地址空间。

DOS 操作系统下的 C 语言中就已经有了”堆”的概念,这时的”堆”是程序初始化时向操作系统申请并预留的大块内存,程序通过 C 函数在这块空间中申请和释放内存。

在Win32中,进程可以使用的整个地址空间就是一个堆。

 

标准内存管理函数

 

并且”堆”的概念又被引伸了一步:Win32中分两种堆

一种是进程的”默认堆”,默认堆只有一个,指的就是可以使用的整个地址空间;

另一种是”动态堆”,也称为”私有堆”,私有堆类似于 DOS 下 C 语言中使用的那种堆,一个进程可以随意建立多个私有堆,也可以随意将它们释放。

 

私有堆全部位于默认堆中,从概念上看,它和默认堆并没有什么不同,使用堆管理函数可以对所有的私有堆和默认堆进行操作。

标准内存管理函数总是在默认堆中分配和释放内存,这组函数就是常规意义上的内存管理函数。

 

内存映射文件函数

 

内存映射文件函数相对比较独立,它是为了文件操作的方便性而设立的。

当对文件进行操作的时候,一般先打开文件,申请一块内存用做缓冲区,再将文件数据循环读入并处理,当文件长度大于缓冲区长度则需要多次

读入,每次读入后处理缓冲区边界位置的数据往往是个麻烦问题。

还记得我们曾经介绍过 Windows 可以使用磁盘文件当做虚拟内存,内存映射文件函数使用同样的办法将一个文件直接映射到进程的地址空间中,这样可以通过内存指针用读写内存的办法直接存取文件内容。

 

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.