能力值:
( LV4,RANK:50 )
|
-
-
2 楼
有个别区段会被丢弃,比如重定位段
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
开始只是对文件中的代码段、数据段等(不是所有区段)建立内存映射,并且只将工作集加载到内存里(建立物理内存映射),就开始运行了,没有被加载到内存的地址被访问时会自动加载(缺页处理)。
|
能力值:
( LV2,RANK:10 )
在线值:

|
-
-
4 楼
刚才碰巧查到这些东西:
一.执行程序
当创建一个线程时,
1.系统只是保留了足够大的对应的.exe文件区域,将.exe文件本身作为物理内存,执行映射,却并未提交;
2.访问.exe文件的部分区域,以确定依赖的.dll(这将导致部分页面被提交);
3.依次LoadLirary(像为.exe保留区域一样,也为.dll保留区域,并有些类似第4步);
4.执行.exe的启动代码,并持续执行(执行到哪就提交哪块).
二.程序运行时修改全局变量或自修改代码
同一个程序可能运行多个实例,而每个进程都把原始文件当作物理内存看待,那么其中一个进程修改了某部分数据或代码,其他进程是否也被改动了呢?答案是否定的。由于Copy-On-Write的干预,每当一个进程试图修改全局变量(或代码)时,都会把这个变量所在的页重新拷贝一份,并把虚拟地址映射到这个拷贝上,此时怎么改都只是改动单独为此进程准备的副本,而不会影响其他进程。
但我还有个地方不明白:
在加载资源的时候为什么在LoadResource后还要LockResource?如果是都在内存映射文件里的话,LockResource是不是就没有必要调用了?
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
|
能力值:
( LV12,RANK:220 )
|
-
-
6 楼
除了某些区段,文件的附加数据也是不被加载到内存的
|
|
|