windows mobile 6.5 在界面上做了很大改变,Titanium滑动桌面,手指滑动控制的各种控件,全贴图的skin等等。给人的印象好像是既然视觉效果复杂了,速度一定慢了,占内存大了。
实际上,WM6.5的速度比WM6.1等要快,而且更少机会出现内存不足的错误。
这篇是Da_G写的cook rom的教程,里面很好的讲了为何WM65的性能提高了
http://forum.xda-developers.com/showthread.php?t=544445
我知道这里多不懂技术,我就简单的解释一下。
WM6.5使用的WINCE5.2内核在现有框架下增加了64MB的内存映射空间,使得当前的程序(激活进程)不必再跟预先映射(XIP)的DLL争夺32MB的内存空间,而且还可以把更多的DLL预先映射到内存中,大幅度提高读取速度。
下面是我画的一个示意图:
┏━━━━━━━━━━━━━━┓FFFFFFFF
┃Kernal ┃
┣━━━━━━━━━━━━━━┫80000000
┃SLOT63RESOURCE┃Resource files
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨7E000000
┃SLOT62 ??? ┃
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨7C000000
┃SLOT61 XIP ┃
┃SLOT60 DLLS ┃
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨78000000
┃SLOT59 ┃
┃Memory map ┃Memory mapped files
┃SLOT33 ┃
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨40000000
┃SLOT32 ┃
┃ …… ┃
┃SLOT2其他进程 ┃
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨04000000
┃SLOT1 XIP DLLs┃
┠┄┄┄┄┄┄┄┄┄┄┄┄┄┄┨02000000
┃SLOT0当前程序 ┃
┗━━━━━━━━━━━━━━┛00000000
WinCE总共4GB的虚拟内存空间,跟WIN32相同,但为达到快速context切换,实际切分成不同的内存槽(slot),进程本身只能映射分配32MB的地址空间而不是4GB。
在老的WM里面,XIP DLL只能用slot 1和0,总共64MB,可是SLOT 0还担负着映射当前进程的艰巨责任,多映射一个DLL就少一点可用内存,就算物理内存很多,也会因为虚拟内存空间不足而导致内存不足错误。但不映射的话系统性能又很低,因为flash rom太慢了。
WM6.5增加了63, 61和60做映射,其中63只能映射资源文件。这样系统的那些复杂的皮肤、动画以及运行库文件就都在内存里随时调用——事实上,现在的手机处理器多数内置图像加速卡,绘图根本不耗CPU的!
当然我们也可以看出,对ROM的优化对系统性能影响很大,除了XIP DLL和资源文件以外还有很多技巧,因此选一个好的定制ROM是非常重要的。