首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

对于虚拟内存的操作

2011-12-11 
关于虚拟内存的操作书本中有一句这样的话:8MEM_COMMITPAGE_READONLY其中:8 是操作的内存页数(即第8页内存)

关于虚拟内存的操作
书本中有一句这样的话:
8 MEM_COMMIT PAGE_READONLY
其中:
8 是操作的内存页数(即第8页内存).
MEM_COMMIT 在物理地址空间分配.
PAGE_READONLY 只读属性,如果试图进行写操作,将引发访问违规。如果系统
  区分只读、执行两种属性,那么试图在该区域执行代码也将引
  发访问违规。


问题:
它的意思是不是把第8页虚拟内存中的数据读到物理内存中?
PAGE_READONLY 是不是说这段数据只能读?

如果是 8 MEM_RESERVE PAGE_READONLY
是不是就没操作了?
因为:
MEM_RESERVE 是 在虚拟地址空间分配,不分配物理空间.
而数据已在虚拟内存了.所以不用分配虚拟地址空间的操作,
然而,这样的话 PAGE_READONLY 不是没用了吗?(本人理解PAGE_READONLY操作是对物理内存中的数据进行的,如果数据不在物理内存中的话当然就没操作啦)


总之本人理解得很糟,希望大家帮我理一下思路.先谢了~~~~~~

[解决办法]
你这么称呼我感觉好RM....其实我也是查了MSDN才回复你的,谈不上指教。你这个帖子应该发到OS的论坛里,这是windows操作系统内存管理的问题。
首先要明白几个概念。首先Windows系统中的每个进程都被赋予它自己的虚拟地址空间。当进程被创建并被赋予它的地址空间时,该可用空间的主体是空闲的,未分配的。
若要使用该地址空间的各个部分,必须要调用virtualAlloc 函数来分配它里边的各个区域。对每一个地址空间的区域进行分配的操作称为保留(reserve),对应的参数为MEM_RESERVE。
若要使用已保留的地址空间区域,则必须分配物理存储器,然后将该物理存储器映射到已保留的地址空间区域。这个过程叫提交物理存储器。也调用VirtualAlloc函数,对应参数MEM_COMMIT。
两者同时操作的话,则参数为MEM_COMMIT ¦ MEM_RESERVE
但是,当一个应用程序通过调用VirtrualAlloc函数,将物理存储器提交给地址空间的一个区域时,地址空间实际上是从硬盘上的一个文件中进行分配的,而不是内存。


1. 对于windows操作系统来说,系统初始化的时候,就已经创建了一个.sys文件作为虚拟内存。最大最小值可以设置。
2. MEM和PAGE都是分配内存时,指定内存区域的参数,而不是具体的某个概念。对于程序员来说,只知道有“内存”,但却不知道是在RAM还是硬盘里的。
MEM_COMMIT上面的几句话已经说过了,而PAGE_READONLY指的是,该区域页面的保护属性是只读的
3. 页面文件的换入换出,值得是操作系统本身对内存的管理方法。从程序员角度来看,磁盘空间看上去像内存一样。磁盘上的文件叫页文件,它包含了可以供所有进程使用的虚拟内存。
这句话是说,把RAM里的数据,写到页文件里。而如果不追求概念的准确度的话,可以理解为写到虚拟内存里

热点排行