Windows系统内存管理全解析
1. 内存管理基础
Windows 2000和Windows 98采用了相似的内存管理技术。在当前进程的堆中,有一个指向内存地址的32位指针,每个进程都有独立的内存地址空间,与其他进程相互隔离。
1.1 内存架构
在Win32环境下,每个进程拥有一个最大为4GB的32位虚拟地址空间。低内存(0x00000000到0x7FFFFFFF)的2GB供用户使用,高内存(0x80000000到0xFFFFFFFF)的2GB则为内核保留。在Windows 2000的高级版本中,用户内存扩展到3GB,内核内存减少到1GB。
进程使用的地址并非内存中的实际物理位置。内核为每个进程维护一个页映射,用于将虚拟地址转换为对应的物理地址。这样,内存管理器就能根据现有需求移动内存并保持其高效性。所有内存地址都相对于进程的地址空间,进程无法在自己的地址空间之外进行读写操作,以此保护进程之间的独立性。
1.2 全局内存
全局内存从进程的全局堆中分配,使用 GlobalAlloc 函数进行分配,该函数会返回一个指向内存的句柄。在大多数情况下,这个句柄就是指向已分配内存的指针。内存以具有读写访问权限的私有、已提交页面的形式分配,其他进程无法访问这些私有内存。
使用带有 GMEM_DDESHARE 标志的 GlobalAlloc 函数,并不像旧版本的Windows那样实现真正的全局共享。该标志仅用于兼容性,一些应用程序可使用它来提高动态数据交换(DDE)操作的性能。需要共享内存的应用程序必须使用文件映射对象
超级会员免费看
订阅专栏 解锁全文

1048

被折叠的 条评论
为什么被折叠?



