CE6上的虚拟内存布局
来源:互联网 发布:广电网络客服电话绵阳 编辑:程序博客网 时间:2024/06/04 21:27
转载自:http://hi.baidu.com/even_xf/blog/item/cb7841b4b352a6758bd4b2ae.html
首先看看这张图,从Windows CE Base Team Blog上抓过来的,左边是CE5的虚拟内存布局,右边是CE6的.
上图暂且按下不表,我们先翻出CE5文档里的大图来看( CE5和CE6文档里讲MEM ARCH的地方, Windows CE Features -> Core OS Services -> Core OS Design Development -> Kernel Overview -> Memory Architecture, 藏这么深, 害我找半天 )
上图是CE5的内存布局细节图,User Space里面的Slot 1, Slot 33-63还都被群雄割据, 所以咱们每个进程只能有32M(0x0200 0000)的虚拟地址空间, 一共32个slot可以容纳32个进程. 当然如果32M用光的话,据文档说可以用memory-mapped file或者VirtualAlloc来扩展,不过这两种做法我自己都没有试验过. 偶比较艰苦朴素,内存花销没那么大. 有多艰苦? BOOL类型都舍不得用啊,多凑几个BOOL,搞位段去一块儿用一个字节吧, 穷啊,买不起RAM啊~ 哈哈,夸张了。
CE6里面看起来就爽很多了.(疯掉,CE6这个地方不是给图,而是给表格, 我敲了好久)
Statically mapped, cached
USER0x7FF0 0000 ~ 0x7FFF FFFF1MBunmapped for protection0x7000 0000 ~ 0x7FEF FFFF255MBshared system heap0x6000 0000 ~ 0x6FFF FFFF256MBRAM backed map files0x4000 0000 ~ 0x5FFF FFFF512MBUser mode DLLs, Code and data0x0001 0000 ~ 0x3FFF FFFF1GBProcess, User allocatable VM0x0000 0000 ~ 0x0000 100064KBCPU dependent user kernel data如上图,虽然内核区和用户区对半开的局面没变,但是每个进程可以占据USER SPACE全部的2GB地址空间. 当然只有当前进程可以拿这2GB,就是在CE5里面位于slot 0的那个进程,这会儿猫变虎了;其他的进程到后面排队上场。不过我很好奇盖茨大叔把非当前进程的2GB内容藏到哪里去了, 而且还是号称最多32,000个进程的, 还有就是多个进程并发运行时, 这当前的2GB如何切换,我在CE6的文档暂时里没有找到相关说明.
我比较关心的,每个进程的HEAP占了1GB, malloc起来比较应该爽. 但是实际上没法用那么多, 因为物理内存的限制仍然是512M, 这点上CE5和CE6是一样的, 因为KERNEL SPACE里面,在0x80000000~0xBFFFFFFF的1GB空间里,得把RAM映射出来CACHED和UNCHACHED两份, 这就限制了物理内存只能有512M. 如果你非要说WINCE真破啊,不不支持1GB的物理内存啊, 靠,我鄙视你,有了1GB内存可以跑VISTA了,或者至少也XP EMBEDDED,而不是跟我们这些穷人在玩CE.
CE6这样修改内存布局的结果是需要使用大量内存的应用程序可以跑了, 系统的安全性也提高了, 但是进程间通信和缓存数据的传递变得复杂了.关于CE6的进程间通信我还没试验.
简单地打个比方,CE5的内存布局就是大家一起来切一块蛋糕,每人分得很小一块,围着桌子一起吃,所以要偷吃别人的那块比较容易些;CE6的内存布局就是每人都拿一块大蛋糕,,但是饭桌只有一个,所以得挨个轮流吃,这样要偷吃别人的蛋糕就没那么容易了。但是两者存在同样的瓶颈,不论是做很多块蛋糕,还是做成一大块来分,可以拿来做蛋糕的面粉上限就只有那么多,即512M物理内存上限。
- CE6上的虚拟内存布局
- 进程的虚拟内存布局
- CE6.0上的T9拼音输入法
- Linux在X86上的虚拟内存管理
- Linux在X86上的虚拟内存管理
- arm Linux虚拟内存布局
- arm linux虚拟内存布局
- [原创翻译]WinCE5与WinCE6的虚拟内存布局(wwfiney@ARMCE)
- [原创翻译]WinCE5与WinCE6的虚拟内存布局
- 虚拟内存布局、内存的分工、堆与栈
- 应用程序运行时的虚拟内存布局 - 进程 - 线程
- 解决CE6和CE5在Platform Builder的Connectivity Options上的冲突
- 解决CE6和CE5在Platform Builder的Connectivity Options上的冲突
- 解决CE6和CE5在Platform Builder的Connectivity Options上的冲突
- 解决CE6和CE5在Platform Builder的Connectivity Options上的冲突
- 解决CE6和CE5在Platform Builder的Connectivity Options上的冲突
- 关于CE6的提问解答
- 什么是虚拟内存?虚拟内存的优缺点?
- 如何查看linux内存
- C++ namespace
- 留下是因为找到了自己的位置
- [转]HTTP请求(GET与POST区别)和响应
- Net-snmp agent扩展
- CE6上的虚拟内存布局
- linux支持的最大物理内存
- 第5届索尔维会议
- 孩子感冒看病,一天花掉一万多
- C# 连接access并存至datatable中
- 【转】HTTP POST GET 本质区别详解
- Draw
- HSV 和 RGB 互换 函数 c++
- 在线手册速查