问题1:书上第十三章说系统为每个进程创建了4GB的地址空间,而用于用户方式的地址空间有2GB,用户方式的地址空间也就是程序员可以使用的地址了,对吧,可是书上301页说“多年来,编程人员一直强烈要求扩大用户方式的地址空间”。通常来讲,2GB的内存地址足够用了,为什么有的程序员觉得不够用呢,要求扩大用户方式的地址空间呢,而且还是强烈要求?问题2:还是第十三章的问题,根据我的理解,要使用内存好像要经过两个步骤:
1:要保留地址空间的区域。2:分配物理存储器,将该物理存储器映射到已保留的地址空间区域。
我想问的是:
第一步保留地址空间具体做了什么,“保留”的意义何在?要使用内存直接有第二步不就行了么?
第二步中的将该物理存储器映射到已保留的地址空间区域,具体是怎么映射的呢?问题3:任然是第十三章的问题:书上306页说“当启动一个应用程序的时候,系统将打开该应用程序的. e x e文件,确定该应用程序的代码和数据的大小。然后系统要保留一个地址空间的区域,并指明与该区域相关联的物理存储器是在. e x e文件本身中。即系统并不是从页文件中分配地址空间,而是将. e x e文件的实际内容即映像用作程序的保留地址空间区域。当然,这使应用程序的加载非常迅速,并使页文件能够保持得非常小。”
首先这里最后一句说的页文件是否就是exe文件?
在后面的章节也提到过系统如何加载EXE和dll文件,是将这些文件映射到内存的地址空间,但不明白系统具体怎么加载的?也不明白为什么书上为什么说这样加载非常迅速(比将代码和数据拷贝到内存迅速)?
1:要保留地址空间的区域。2:分配物理存储器,将该物理存储器映射到已保留的地址空间区域。
我想问的是:
第一步保留地址空间具体做了什么,“保留”的意义何在?要使用内存直接有第二步不就行了么?
第二步中的将该物理存储器映射到已保留的地址空间区域,具体是怎么映射的呢?问题3:任然是第十三章的问题:书上306页说“当启动一个应用程序的时候,系统将打开该应用程序的. e x e文件,确定该应用程序的代码和数据的大小。然后系统要保留一个地址空间的区域,并指明与该区域相关联的物理存储器是在. e x e文件本身中。即系统并不是从页文件中分配地址空间,而是将. e x e文件的实际内容即映像用作程序的保留地址空间区域。当然,这使应用程序的加载非常迅速,并使页文件能够保持得非常小。”
首先这里最后一句说的页文件是否就是exe文件?
在后面的章节也提到过系统如何加载EXE和dll文件,是将这些文件映射到内存的地址空间,但不明白系统具体怎么加载的?也不明白为什么书上为什么说这样加载非常迅速(比将代码和数据拷贝到内存迅速)?
解决方案 »
- 我生成的dll文件需要另外一个lib文件支持,怎样才能把这个lib包含到这个dll里?
- IXMLDOMDocumentPtr -> load总是失败?
- 大哥大姐们 帮我解决下吧 把数组和结构体以CommandPtr存入数据库用binary保存 和用CommandPtr提取的方法
- CArray 的问题 急
- CRichEditCtrl里显示的内容太多时,不能再显示IRichEditOle 插入的位图了。是不是有数量的限制啊?请各位帮个忙!谢谢!
- 各种音乐格式间如何转换?
- VC如何调用VB开发的COM组件?高手请进!!!
- 怎么读这个动态变化的文件,求教,在线等。。。加急!!!!!!!!
- 请教这样的代码是什么意思,100分,在线等候。
- ALong_Yue:继续说任务栏图标的事
- 关于宏定义的问题
- 两个音轨的合成??
2,我觉得预留只是为了让软件“以为”自己成功分配的内存,而真正分配物理块的动作留到真正需要访问这块内存时再作。可能基于两个方面原因,其一,防止系统频繁分配/回收,其二如果直接分配页面,会导致进程在内存中的驻留集不受控制地变大超过其工作集,可能会导致其他进程的可用物理块减少,进而引发抖动。
所谓映射,当然是通过页表完成的。
3,我想可能和内存映射文件类似吧,CreateFileMapping可以把硬盘上一个文件映射到进程地址空间的某块,使用类似技术,直接把exe文件像内存映射文件那样映射到进程地址空间当然比拷贝代码要快得多。
读书百遍,其意自见了!直接把exe文件像内存映射文件那样映射到进程地址空间当然比拷贝代码要快得多。
把exe文件映射到进程地址空间是不是只是把exe代码的地址放到进程的地址空间中呢?而没有放到内存中去,具体引用时再加载到内存?
还是不明白系统都具体做了什么手脚?
你直接在这里说了不就好了么!
公司不准俺上QQ
2. 要想申请到内存必须有两个条件:(1)有足够的内存,真实的或虚拟的(2)有地址空间能让你访问到内存。根据这个必须要有申请空间和映射内存两个步骤
3. 页文件不是.exe文件,而是系统用来存放虚拟内存用的文件。