Windows虚拟内存管理
增加虚拟内存的方法

增加虚拟内存的方法虚拟内存是计算机系统中一种重要的资源管理技术,它可以将硬盘空间用作临时的物理内存,以弥补物理内存不足的情况。
在使用计算机的过程中,如果出现内存不足的情况,系统会自动将一部分硬盘空间用作虚拟内存,以提高系统的运行效率。
因此,合理增加虚拟内存对于提升计算机性能至关重要。
接下来,我们将介绍一些增加虚拟内存的方法,帮助您更好地管理计算机资源。
1. 调整虚拟内存大小。
在Windows系统中,您可以通过以下步骤来调整虚拟内存的大小,首先,右键单击“此电脑”图标,然后选择“属性”。
接着,点击“高级系统设置”,在弹出的窗口中选择“性能设置”,再点击“高级”选项卡,在“虚拟内存”一栏中点击“更改”。
在弹出的窗口中,取消“自动管理所有驱动器的分页文件大小”,然后选择您想要设置的驱动器,点击“自定义大小”,输入初始大小和最大大小,最后点击“设置”和“确定”按钮保存设置。
2. 清理临时文件。
在使用计算机的过程中,系统会产生大量的临时文件,占用硬盘空间。
这些临时文件不仅会影响系统性能,还会占用虚拟内存空间。
因此,定期清理临时文件是增加虚拟内存的有效方法。
您可以通过运行磁盘清理工具或手动删除临时文件来释放硬盘空间,从而增加虚拟内存的可用空间。
3. 增加物理内存。
虚拟内存的大小受制于物理内存的大小,如果计算机的物理内存不足,虚拟内存的空间也会受到限制。
因此,增加物理内存是增加虚拟内存的一种有效方法。
您可以通过购买更大容量的内存条或者增加内存条的数量来提升计算机的物理内存,从而间接增加虚拟内存的可用空间。
4. 关闭不必要的后台程序。
在计算机运行过程中,很多后台程序会占用系统资源,包括虚拟内存。
因此,关闭不必要的后台程序是增加虚拟内存的一种有效方法。
您可以通过任务管理器或者系统优化软件来关闭不必要的后台程序,释放虚拟内存空间,提升系统运行效率。
5. 使用高效的硬盘。
硬盘的读写速度直接影响虚拟内存的性能。
因此,使用高效的硬盘是增加虚拟内存的一种有效方法。
Windows系统内存占用优化

Windows系统内存占用优化Windows操作系统是目前广泛使用的电脑操作系统之一,然而,随着软件的安装和使用,系统内存的占用可能逐渐增加,导致系统运行变慢或者出现崩溃等问题。
因此,对Windows系统内存的占用进行优化非常重要。
本文将介绍一些优化Windows系统内存占用的方法。
一、关闭不必要的后台进程和服务1.按下Win+R组合键,输入"msconfig"并回车,打开系统配置工具。
2.在"常规"选项卡中,选择"选择性启动",然后取消勾选"启动项",点击"应用",最后点击"确定"。
3.切换到"服务"选项卡,勾选"隐藏所有Microsoft服务",然后禁用不必要的服务,如游戏咨询、影音娱乐等,点击"应用",最后点击"确定"。
二、优化系统虚拟内存设置1.按下Win+R组合键,输入"sysdm.cpl"并回车,打开系统属性对话框。
2.切换到"高级"选项卡,在"性能"区域点击"设置"。
3.切换到"高级"选项卡,在"虚拟内存"区域点击"更改"。
4.取消勾选"自动管理所有驱动器的分页文件大小",然后选择系统安装盘,点击"自定义大小"。
5.根据实际情况,设置初始大小和最大大小,推荐将初始大小设置为系统内存的1.5倍,最大大小设置为系统内存的3倍。
6.点击"设置",最后点击"确定"。
三、优化内存页面交换1.按下Win+R组合键,输入"regedit"并回车,打开注册表编辑器。
如何正确设置虚拟内存设置Windows7的虚拟内存的正确方法

如何正确设置虚拟内存设置Windows7的虚拟内存的正确方法设置Window7的虚拟内存的方法1、何为虚拟内存内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽。
为了解决这个问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存,虚拟内存在硬盘上的存在形式就是FILE.SYS这个页面文件。
虚拟内存只是真实内存不足的补充,所以不要加以神化,虚拟内存的读写性能(即硬盘的读写)只有真正内存性能的几十分之一,而且对硬盘损伤很大!能不用则不用,能少用则少用!原则是够用+留少量余量即可。
2、虚拟内存设置的误区其一:虚拟内存不应该设在系统盘C盘(系统盘为其他盘同理),而应该设在其他非系统分区。
答案:错!因为C盘做为默认的系统盘,硬盘读写最频繁的就是系统文件和页面文件。
而硬盘读写时最耗时的操作是什么呢是磁头定位!而同一分区内的磁头定位无疑要比跨分区的远距离来回定位要节省时间!所以,系统盘内的虚拟内存(系统默认值)是执行最快、效率最高的。
其二:虚拟内存的最佳值是内存容量的1.5-3倍。
答案:错!要根据实际使用情况来判断。
特别是大内存普及的今天。
内存使用率看任务管理器的内存一栏。
一般512MB内存,根据实际使用内存占用,可以设虚拟内存为256-768MB(内存+虚拟内存之和一般比正常占用高256MB即可)。
1GB内存,根据实际使用内存占用情况,可以设虚拟内存为128-1024MB(内存+虚拟内存之和一般比正常占用高256-512MB即可)。
平时正常占用为几百MB的人(占多数),甚至可以禁用虚拟内存(有软件限制的可以设少量虚拟内存,如16-128MB)。
内存为2G及以上的,一般可以禁用虚拟内存(有软件限制的可以设少量虚拟内存,如16-128MB)。
部分确实会使用大量内存的人,如玩大型3D 游戏、制作大幅图片、3D建模等,并收到系统内存不足警告的,才需要酌情设定虚拟内存。
windows_server_服务器虚拟内存不足的处理方法

windows server 服务器虚拟内存不足的处理方法1. 引言1.1 概述虚拟内存是操作系统中的一种重要概念,它允许将部分物理内存扩展为硬盘上的虚拟内存空间。
在Windows Server服务器中,虚拟内存的不足可能会导致系统性能下降甚至崩溃。
因此,了解如何处理虚拟内存不足问题对于维护服务器的正常运行至关重要。
本文将介绍Windows Server虚拟内存的原理、不足表现以及可能出现的原因,并提供一些处理方法供参考。
希望通过这份指南,读者们能够更好地应对服务器虚拟内存不足问题。
1.2 文章结构本文将分为以下几个部分进行叙述:- 引言:介绍文章主题和结构。
- Windows Server 虚拟内存:解释虚拟内存的原理、不足表现和出现原因。
- 处理方法一:介绍一些处理虚拟内存不足的常用方法。
- 处理方法二:探讨使用高效管理工具进行优化和升级硬件或增加物理内存等处理策略。
- 结论:总结文章内容和提醒注意事项。
1.3 目的本文旨在向读者们提供针对Windows Server虚拟内存不足问题的解决方法。
通过了解虚拟内存原理和可能出现的原因,读者们将能够根据实际情况采取相应的处理措施,并优化服务器的性能和稳定性。
下面我们将进入第二部分,讨论Windows Server虚拟内存的原理及其中存在的问题。
2. Windows Server 虚拟内存:2.1 虚拟内存原理:在Windows Server操作系统中,虚拟内存是通过将一部分硬盘空间用作临时储存来扩展系统的可用内存。
当物理内存不足时,操作系统会将一些不常用的数据存储到虚拟内存中,并从虚拟内存中读取需要的数据。
2.2 虚拟内存不足表现:当Windows Server服务器的虚拟内存不足时,可能会出现以下表现:- 系统运行变慢或卡顿- 应用程序响应缓慢- 出现错误提示消息,如“页面文件过小”或“虚拟内存不足”2.3 原因分析:导致Windows Server服务器虚拟内存不足的原因主要包括:- 高负载运行多个应用程序或服务,消耗了大量物理内存- 虚拟内存大小设置不合理- 存在大量临时文件和缓存占据了虚拟内存空间- 启用了不必要的程序或服务,占用了大量系统资源为了解决服务器虚拟内存不足问题,并确保系统正常运行,我们可以采取以下处理方法。
电脑提示虚拟内存不足的解决方法

电脑提示虚拟内存不足的解决方法宝子,电脑提示虚拟内存不足是不是让你很头疼呀?别慌,我来给你说说咋解决这个小麻烦。
咱先得知道啥是虚拟内存。
简单说呢,就像是电脑给自己准备的一个备用空间,用来放那些暂时不用但又不能扔掉的数据。
要是这个空间不够了,就会给你提示。
那咋解决呢?一种办法就是增加虚拟内存的大小。
在Windows系统里,你可以这样做哦。
右键点击“此电脑”,选择“属性”。
然后在弹出的窗口里找到“高级系统设置”。
在“系统属性”的“高级”选项卡下,点击“性能”区域的“设置”按钮。
在“性能选项”里再切换到“高级”选项卡,你就能看到“虚拟内存”这一块啦。
点击“更改”,就可以自己调整虚拟内存的大小啦。
不过要注意哦,不要把这个数值设得太大,不然可能会占用太多硬盘空间呢。
还有个办法就是清理一下电脑里的垃圾文件。
你想想,电脑里有好多没用的东西占着地方,那虚拟内存能不紧张嘛。
你可以用系统自带的磁盘清理工具。
在“此电脑”里找到你的系统盘(一般是C盘),右键点击,选择“属性”,然后就能看到“磁盘清理”这个按钮啦。
点进去让它扫描一下,然后把那些能清理的文件都清理掉,像什么临时文件、回收站文件之类的。
再有呢,就是看看有没有一些不必要的程序在后台偷偷运行。
这些程序也会占用内存,让虚拟内存变得紧张。
你可以打开任务管理器(按Ctrl + Shift + Esc就能打开),看看那些正在运行的程序,把那些你现在不需要的程序都关掉。
比如说那些自动启动但你又不常用的软件,就可以在软件的设置里把它的开机自启关掉。
宝子,按照这些方法来,一般就能解决虚拟内存不足的问题啦。
要是还不行的话,那可能就得考虑给电脑加个内存条啦。
不过这就是另外一个话题咯。
希望你的电脑能快快好起来,不再给你出这些小状况啦。
。
怎样设置虚拟内存

怎样设置虚拟内存
要设置虚拟内存,您可以按照以下步骤进行操作:
1. 打开控制面板:可以通过在Windows开始菜单中搜索“控制面板”来找到控制面板。
2. 进入“系统和安全”选项:在控制面板中,选择“系统和安全”选项。
3. 进入“系统”选项:在“系统和安全”页面中,选择“系统”选项。
4. 进入“高级系统设置”:在“系统”选项中,选择左侧的“高级系统设置”。
5. 打开“性能”选项:在“高级系统设置”对话框中,找到“性能”部分并点击“设置”按钮。
6. 进入“虚拟内存”设置:在“性能选项”对话框中,选择“高级”选项卡,然后点击“更改”按钮。
7. 调整虚拟内存大小:在“虚拟内存”对话框中,取消选中“自动管理所有驱动器的虚拟内存大小”复选框。
然后,选择要更改虚拟内存大小的磁盘驱动器,然后选择“自定义大小”。
8. 设置初始大小和最大大小:在“自定义大小”选项下,您可以输入想要设置的初始大小和最大大小(以MB为单位)。
建议将初始大小设置为计算机RAM 的1.5倍,将最大大小设置为计算机RAM的3倍。
如果您不确定RAM的大小,可以通过在控制面板的“系统”选项中查找。
9. 应用更改:在设置完初始大小和最大大小后,点击“设置”按钮,然后点击“确定”按钮。
您可能需要重新启动计算机才能使更改生效。
请注意,虚拟内存是计算机硬盘上的一部分空间,用户可以将其用作RAM的扩展。
设置虚拟内存的大小可能会影响计算机的性能和速度。
如果您不确定如何正确设置虚拟内存,建议将其保留为自动管理。
windows7 虚拟内存怎么设置

windows7 虚拟内存怎么设置我家的电脑1G内存windows7 虚拟内存怎么设置作用是什么①用右键点击桌面上的“我的电脑”图标,在出现的右键菜单中选“属性”选项打开“系统属性”窗口。
在窗口中点击“高级”选项卡,出现高级设置的对话框②点击“性能”区域的“设置”按钮,在出现的“性能选项”窗口中选择“高级”选项卡,打开其对话框。
③在该对话框中可看到关于虚拟内存的区域,点击“更改”按钮进入“虚拟内存”的设置窗口。
选择一个有较大空闲容量的分区,勾选“自定义大小”前的复选框,将具体数值填入“初始大小”、“最大值”栏中,而后依次点击“设置→确定”按钮即可,最后重新启动计算机使虚拟内存设置生效。
得到正确的虚拟内存值的方法是:1.运行“perfmon.msc”打开性能监视器,展开左侧的性能日志和警报,并点击选择记数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为Pagefile,然后回车确认。
2.在常规选项卡下,点击添加记数器按钮,在新弹出的窗口的性能对象下拉菜单中选择Paging File,并选择“从列表选择记数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮。
3.然后关闭这个窗口,并点击图三中的“确定”按钮。
点击“是”创建日志文件。
接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。
4.这样,点击确定后这个记数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能多的打开和关闭各种经常使用的应用程序和游戏。
经过几个小时的使用,基本上记数器已经可以对你的使用情况做出一个完整的评估。
5.这时你需要先停止这个记数器的运行,同样是在记数器日志窗口中,选中我们新建的Page File记数器,然后右键点击,并且选择停止。
用记事本打开日志文件。
6.需要注意的是,在日志中的数值并不是分页文件的使用量,而是使用率。
windows的内存管理机制

windows的内存管理机制Windows的内存管理机制在计算机系统中,内存管理是一个非常重要的方面,它负责管理计算机系统中的内存资源,确保程序能够正常运行。
Windows作为一种常见的操作系统,也有自己独特的内存管理机制。
一、虚拟内存管理Windows采用了虚拟内存管理机制,将物理内存和虚拟地址空间进行映射,使得每个进程都拥有独立的地址空间。
这样可以提高内存利用率,同时也增加了系统的稳定性和安全性。
Windows的虚拟内存管理机制通过将虚拟地址空间划分为固定大小的页面,将页面映射到物理内存或磁盘上的页面文件。
当程序需要访问某个虚拟地址时,系统会根据页表的映射关系将对应的页面加载到物理内存中,如果物理内存不足,系统会将不常用的页面置换到磁盘上的页面文件中。
二、内存分页Windows将内存分为固定大小的页,一般为4KB。
这样的页大小既能够满足大部分程序的内存需求,又不会造成过多的内存浪费。
内存分页的好处是可以更灵活地管理内存资源。
系统可以按需分配和回收页面,提高内存利用率。
同时,内存分页也增加了内存的安全性,不同的进程之间无法直接访问对方的内存空间,避免了数据的混乱和安全风险。
三、内存保护Windows的内存管理机制还包括内存保护机制,可以确保不同进程之间的内存空间不会相互干扰。
每个进程都有自己的地址空间,内存保护机制可以防止一个进程访问其他进程的内存空间,增强了系统的稳定性和安全性。
四、内存回收Windows的内存管理机制还包括内存回收机制,当一个进程不再需要某个页面时,系统会将该页面回收,释放给其他进程使用。
内存回收可以提高内存的利用率,避免内存的浪费。
五、内存压缩Windows还引入了内存压缩的机制,当系统内存不足时,会将一部分内存压缩,从而释放出更多的内存空间。
内存压缩可以减少对磁盘页面文件的频繁访问,提高系统的响应速度。
六、内存分配Windows的内存管理机制还包括内存分配机制,用于分配和回收内存资源。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本概念【摘录】每个进程都被赋予它自己的虚拟地址空间。
对于32位进程来说,这个地址空间是4GB,因为32位指针可以拥有从0x000000000至0xFFFFFFFF之间的任何一个值。
这使得一个指针能够拥有4 294 967 296个值中的一个值,它覆盖了一个进程的4GB虚拟空间的范围。
这是相当大的一个范围。
由于每个进程可以接收它自己的私有的地址空间,因此当进程中的一个线程正在运行时,该线程可以访问只属于它的进程的内存。
属于所有其他进程的内存则隐藏着,并且不能被正在运行的线程访问。
注意在Windows 2000中,属于操作系统本身的内存也是隐藏的,正在运行的线程无法访问。
这意味着线程常常不能访问操作系统的数据。
Windows 98中,属于操作系统的内存是不隐藏的,正在运行的线程可以访问。
因此,正在运行的线程常常可以访问操作系统的数据,也可以破坏操作系统(从而有可能导致操作系统崩溃)。
在Windows 98中,一个进程的线程不可能访问属于另一个进程的内存。
前面说过,每个进程有它自己的私有地址空间。
进程A可能有一个存放在它的地址空间中的数据结构,地址是0x12345678,而进程B则有一个完全不同的数据结构存放在它的地址空间中,地址是0x12345678。
当进程A中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程A的数据结构。
当进程B中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程B的数据结构。
进程A中运行的线程不能访问进程B的地址空间中的数据结构。
反之亦然。
记住,这是个虚拟地址空间,不是物理地址空间。
该地址空间只是内存地址的一个范围。
在你能够成功地访问数据而不会出现违规访问之前,必须赋予物理存储器,或者将物理存储器映射到各个部分的地址空间。
每个进程的虚拟地址空间都要划分成各个分区。
地址空间的分区是根据操作系统的基本实现方法来进行的。
不同的Windows内核,其分区也略有不同。
当进程被创建并被赋予它的地址空间时,该可用地址空间的主体是空闲的,即未分配的。
若要使用该地址空间的各个部分,必须通过调用VirtualAlloc函数来分配它里边的各个区域。
对一个地址空间的区域进行分配的操作称为保留(reserving)。
每当你保留地址空间的一个区域时,系统要确保该区域从一个分配粒度的边界开始。
对于不同的CP U平台来说,分配粒度是各不相同的。
但是,目前(x86、32位Alpha、64位Alpha和IA-64)都使用64K B这个相同的分配粒度。
当你保留地址空间的一个区域时,系统还要确保该区域的大小是系统的页面大小的倍数。
页面是系统在管理内存时使用的一个内存单位。
与分配粒度一样,不同的CPU,其页面大小也是不同的。
x86使用的页面大小是4KB,而Alpha(当既能运行32位Windows 2000也能运行6 4位Windows 2000时)使用的页面大小则是8 KB。
在较老的操作系统中,物理存储器被视为计算机拥有的RAM的容量。
换句话说,如果计算机拥有16 MB的RAM,那么加载和运行的应用程序最多可以使用16MB的R A M。
今天的操作系统能够使得磁盘空间看上去就像内存一样。
磁盘上的文件通常称为页文件,它包含了可供所有进程使用的虚拟内存。
当然,若要使虚拟内存能够运行,需要得到CPU本身的大量帮助。
当一个线程试图访问一个字节的内存时,CPU必须知道这个字节是在RAM中还是在磁盘上。
从应用程序的角度来看,页文件透明地增加了应用程序能够使用的RAM(即内存)的数量。
如果计算机拥有64MB的RAM,同时在硬盘上有一个100 MB的页文件,那么运行的应用程序就认为计算机总共拥有164MB的RAM。
当然,实际上并不拥有164MB的RAM。
相反,操作系统与CPU相协调,共同将R A M的各个部分保存到页文件中,当运行的应用程序需要时,再将页文件的各个部分重新加载到R A M。
由于页文件增加了应用程序可以使用的RAM的容量,因此页文件的使用是视情况而定的。
如果没有页文件,那么系统就认为只有较少的RAM可供应用程序使用。
但是,我们鼓励用户使用页文件,这样他们就能够运行更多的应用程序,并且这些应用程序能够对更大的数据集进行操作。
最好将物理存储器视为存储在磁盘驱动器(通常是硬盘驱动器)上的页文件中的数据。
这样,当一个应用程序通过调用VirtualAlloc函数,将物理存储器提交给地址空间的一个区域时,地址空间实际上是从硬盘上的一个文件中进行分配的。
系统的页文件的大小是确定有多少物理存储器可供应用程序使用时应该考虑的最重要的因素,RAM的容量则影响非常小。
现在,当你的进程中的一个线程试图访问进程的地址空间中的一个数据块时,将会发生两种情况之一: 在第一种情况中,线程试图访问的数据是在RAM中。
在这种情况下,CPU将数据的虚拟内存地址映射到内存的物理地址中,然后执行需要的访问。
在第二种情况中,线程试图访问的数据不在RAM中,而是存放在页文件中的某个地方。
这时,试图访问就称为页面失效,CPU将把试图进行的访问通知操作系统。
这时操作系统就寻找RAM中的一个内存空页。
如果找不到空页,系统必须释放一个空页。
如果一个页面尚未被修改,系统就可以释放该页面。
但是,如果系统需要释放一个已经修改的页面,那么它必须首先将该页面从RAM拷贝到页交换文件中,然后系统进入该页文件,找出需要访问的数据块,并将数据加载到空闲的内存页面。
然后,操作系统更新它的用于指明数据的虚拟内存地址现在已经映射到RAM中的相应的物理存储器地址中的表。
这时CPU重新运行生成初始页面失效的指令,但是这次CPU能够将虚拟内存地址映射到一个物理R A M地址,并访问该数据块。
保护属性已经分配的物理存储器的各个页面可以被赋予不同的保护属性。
x86和Alpha CPU不支持“执行”保护属性,不过操作系统软件却支持这个属性。
这些CPU将读访问视为执行访问。
这意味着如果将PAGE_EX ECUTE保护属性赋予内存,那么该内存也将拥有读优先权。
当然,不应该依赖这个行为特性,因为在其他CPU上的Windows实现代码很可能将“执行”保护视为“仅为执行”保护。
PAGE_NOACCESS 如果试图在该页面上读取、写入或执行代码,就会引发访问违规PAGE_READONLY 如果试图在该页面上写入或执行代码,就会引发访问违规PAGE_READWRITE 如果试图在该页面上执行代码,就会引发访问违规PAGE_EXECUTE 如果试图在该页面上对内存进行读取或写入操作,就会引发访问违规PAGE_EXECUTE_READ 如果试图在该页面上对内存进行写入操作,就会引发访问违规PAGE_EXECUTE_READWRITE 对于该页面不管执行什么操作,都不会引发访问违规PAGE_WRITECOPY 如果试图在该页面上执行代码,就会引发访问违规。
如果试图在该页面上写入内存,就会导致系统将它自己的私有页面(受页文件的支持)拷贝赋予该进程PAGE_EXECUTE_WRITECOPY 对于该地址空间的区域,不管执行什么操作,都不会引发访问违规。
如果试图在该页面上的内存中进行写入操作,就会将它自己的私有页面(受页文件的支持)拷贝赋予该进程几个API函数通过调用VirtualAlloc函数,可以在进程的地址空间中保留一个区域:PVOID VirtualAlloc(PVOID pvAddress,SIZE_T dwsize,DWORD fdwAllocationtype,DWORD fdwProtect);第一个参数pvAddress包含一个内存地址,用于设定想让系统将地址空间保留在什么地方。
在大多数情况下,你为该参数传递NULL。
它告诉VirtualAlloc,保存着一个空闲地址区域的记录的系统应该将区域保留在它认为合适的任何地方。
系统可以从进程的地址空间的任何位置来保留一个区域,因为不能保证系统可以从地址空间的底部向上或者从上面向底部来分配各个区域。
可以使用MEM_TOP_DOWN标志来说明该分配方式。
对大多数程序员来说,能够选择一个特定的内存地址,并在该地址保留一个区域,这是个非同寻常的想法。
当你在过去分配内存时,操作系统只是寻找一个其大小足以满足需要的内存块,并分配该内存块,然后返回它的地址。
但是,由于每个进程有它自己的地址空间,因此可以设定一个基本内存地址,在这个地址上让操作系统保留地址空间区域。
例如,你想将一个从50MB开始的区域保留在进程的地址空间中。
这时可以传递52 428 800(50×1024×1024)作为pvAddress参数。
如果该内存地址有一个足够大的空闲区域满足你的要求,那么系统就保留这个区域并返回。
如果在特定的地址上不存在空闲区域,或者如果空闲区域不够大,那么系统就不能满足你的要求,VirtualAlloc函数返回NULL。
注意,为pvAddress参数传递的任何地址必须始终位于进程的用户方式分区中,否则对VirtualAlloc函数的调用就会失败,导致它返回N ULL.如果VirtualAlloc函数能够满足你的要求,那么它就返回一个值,指明保留区域的基地址。
如果传递一个特定的地址作为pvAddress参数,那么该返回值与传递给VirtualAlloc的值相同,并被圆整为(如果需要的话)64KB边界值。
第二个参数是dwSize,用于设定想保留的区域的大小(以字节为计量单位)。
由于系统保留的区域始终必须是CPU页面大小的倍数,因此,如果试图保留一个跨越62KB的区域,结果就会在使用4 KB、8 KB或16 KB页面的计算机上产生一个跨越6 4 K B的区域。
第三个参数是fdwAllocationType,它能够告诉系统你想保留一个区域还是提交物理存储器.若要保留一个地址空间区域,必须传递MEM_RESERV E标识符作为参数的值。
如果保留的区域预计在很长时间内不会被释放,那么可以在尽可能高的内存地址上保留该区域。
这样,该区域就不会从进程地址空间的中间位置上进行保留。
因为在这个位置上它可能导致区域分成碎片。
如果想让系统在最高内存地址上保留一个区域,必须为pvAddress参数和fdwAllocationType参数传递N U L L,还必须逐位使用OR将MEM_TOP_DOWN标志和MEM_RESERVE标志连接起来。
注意在Windows 98下,MEM_TOP_DOWN标志将被忽略。
最后一个参数是fdwProtect,用于指明应该赋予该地址空间区域的保护属性。
与该区域相关联的保护属性对映射到该区域的已提交内存没有影响。
无论赋予区域的保护属性是什么,如果没有提交任何物理存储器,那么访问该范围中的内存地址的任何企图都将导致该线程引发一个访问违规。