内存管理API

本文详细介绍了Windows平台下进程内存空间的实现,包括独立的页目录和页表,以及Copy-On-Write机制保证数据保护。此外,讨论了内存页面的保护属性和存取权限,并列举了内存管理API,如HeapAlloc、GlobalAlloc、LocalAlloc和VirtualAlloc,强调了它们在内存分配中的作用和性能差异。
摘要由CSDN通过智能技术生成

一、进程的内存空间

1、实现

  为实现系统中每个进程都有一个私有的虚拟地址空间,系统为每个进程都创建了一个页目录和一组页表。每个进程的页表是独立的,而内核空间中的页表是共享的。

  x86平台上,CR3寄存器标识了页目录所在的物理地址。Windows系统上的第一个进程都有独立的页目录,因此系统运行时,CR3寄存器中保存的页目录地址是会变化的,其值为当前运行的进程的页目录地址。当系统要进行进程切换时,会将CR3设置成新进程的页目录地址。          Windows平台的每一个进程都有一个KPROCESS结构的数据块,其中包括了其进程页目录的地址。

 

2、数据共享与保护

  不同进程的虚拟内存分页可以映射为相同的物理内存分页。

  同时,为了保证这种在映射到相同物理内存分页上的内存分页在进程上仍然是私有的,系统还提供了一些保护机制。如果将某个系统DLL加载到进程内存空间以后,对该DLL中的数据进行了写操作,系统就会监视到该操作,并在数据写入之前将要写入的进程虚拟内存分页映射到另一个新的物理分页,并将原分页中系统DLL的内容复制到这个分页中,进程间不共享这个新物理内存分页,最后进程完成写操作,将数据写入到这个新分页中。这种对内存中系统DLL数据的写入操作不会影响到其他进程,因此保护了各个进程中数据的独立性,这种机制叫做Copy-On-Write。如果进程间确实要共享数据,可以对特定的页面不使用该机制。

 


 二、内存页面的保护属性和存取权限

 

 

保护属性与存储权限

属性常量

意义

PAGE_EXECUTE

可执行

PAGE_EXECUTE_READ

可读、可执行

PAGE_EXECUTE_READWRITE

可读、可写、可执行

PAGE_EXECUTE_WRITECOPY

可读、可写、可执行,以Read-On-WriteCopy-On-Write方式共享

PAGE_NOACCESS

不可访问

PAGE_READONLY

只读

PAGE_READWRITE

可读可写

PAGE_WRITECOPY

Copy-On-Write

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值