SD卡上程序是全部load到内存再运行吗
我有个疑问,像一些跑wince的移动设备,比如汽车车载多媒体(也就是车载DVD系统),有些程序是放在SD卡上的,我的疑问:
假如移动设备的内存有40M,SD卡上的exe应用程序运行起来有20M,系统是把这应用程序的20M(包括代码区,数据区)全部先load到内存之后,再运行的吗?很奇怪拔掉SD卡后,应用程序怎么还能弹出MessageBox来呢,它不是随卡一起被拔出来了么?难道内存已有备份?
希望知道的人能帮忙简单说说这个运行原理?我急着需要答案,现在没来的及去找书看。
[解决办法]
正在运行的程序,在内存中有一分Copy的,没有运行没有。所以,不是 LZ 理解的全部加载到内存中。
[解决办法]
这个要看具体情况吧,有些时候一些小exe确实是全部映射到内存的。
拔掉SD卡之后,你会发现它还可以正常运行。
不过有的时候exe读取SD卡中的一些file,这些file并没有复制到内存,
所以拔掉SD卡时,如果其中的exe正在读file中的内容,这时候程序会出错。
另外,引用MSDN中一个帖子中的一段话,楼主看下:
“
WinCE在装载exe的时候,通过内存映射的方式把exe映射到内存。
在装载的时候,可以用pe section的标志位来控制:
是把exe/dll的内容全部复制到物理内存,
还是不全部复制,用到的时候再从SD卡里访问相应的部分。
如果,修改pe section的标志位,使得在装载的时候,把exe/dll的内容复制到物理内存,
在SD卡突然拔出之后,程序就不至于变成zombie进程,可以关闭或者kill掉。
不过,不过占用的物理内存比较多。
”
[解决办法]
其实这个问题很好验证的:程序运行后,将 SD 卡(EXE所放的介质)拔出。
这时候,操作应用应该是可以的正常响应的。但程序不能去读 SD 卡的其它文件,例如:TXT、BMP等。
这就说明 EXE 是加载到内存中的,至于是否是整个,要看 LZ 这个整个都包含什么?