windows问题分析:内存

本文深入探讨了Windows系统的内存管理机制,包括物理内存、虚拟地址、分页文件和内存池的概念,以及如何通过任务管理器进行内存故障排查。特别讨论了内存不足和句柄泄漏等问题,提供案例分析及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。 往往实际应用中,出现内存异常的概率也是相对比较高,经常会导致系统卡顿、报错等一系列错误。期望通过对windows内存机制的分析,以及常见内存故障排查方法进行汇总,方便后续快速解决相关类似问题。

二、内存管理

2.1 物理内存

物理内存按照字节编号,这个编号称之为地址(Address),地址从0开始顺序排序。但除了操作系统内核本身(驱动程序算内核的一部分),其它程序不能直接使用物理地址访问数据。

Microsoft Windows支持的最大物理内存量从 2 GB 到 24 TB,具体取决于Windows版本。如win7及win10版本,内存限制:

2.2 虚拟地址/工作集

操作系统会向应用程序提供一个连续的虚拟的内存地址空间,当应用程序要访问某个内存数据时,通过这个虚拟的地址访问,而操作系统内核会把这个虚拟地址转换为物理地址后,再进行相应操作。

这种内存管理模式叫保护模式,与之相对的则是早期的简单操作系统如DOS,应用程序直接使用物理地址直接访问内存数据,称之为实模式。实模式的问题在于,如果一个程序发生错误,使用了一个错误的地址并改写了其中的数据,如果这个地址是其它程序使用的,会导致其它程序出错;更严重的情况是这个地址是操作系统使用的,可能会导致系统崩溃。甚至某些恶意程序如病毒木马,可以访问并窃取其它程序的机密数据。

每个进程的虚拟地址空间可以小于或大于计算机上可用的总物理内存。 驻留在物理内存中的进程的虚拟地址空间子集称为工作集,如果进程尝试使用比当前可用更多的物理内存,则系统会将某些内存内容页缓存到磁盘。

2.3 映射表/内存池/段/页

Windows把虚拟地址分为用户地址空间和系统地址空间,用户地址空间是给应用程序使用的,系统地址空间是给系统核心和驱动程序使用的。系统地址空间分为分页池和非分页池。

在保护模式中,操作系统向应用程序提供的虚拟地址是连续的,但对应的物理地址则通常是随机并且错乱的。例如一个虚拟内存地址空间大小为M,内核保留地址空间大小为N的操作系统,使用容量为X的物理内存,运行一个应用程序A:

接着运行另外一个进程B,而且进程A没有退出释放内存,可能会变成这样:

 

可以看到,两个进程都有自己独立的虚拟地址空间,相同地址的虚拟内存会被映射到不同的物理内存上,互不干扰。但内核使用的物理内存只有一份,映射到不同进程的虚拟地址空间中,因此称之为:池(Pool)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值