网站大量收购闲置独家精品文档,联系QQ:2885784924

wince 内存管理 下 60 转载 62.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
wince 内存管理 下 60 转载 62

wince 内存管理 下 60 转载 62 wince内存管理下转载2011-07-14 09:54 静态数据 C和C++应用程序有一个预先定义好的内存块,这是由应用程序被装载时自动分配的。这些块被用来存储静态分配的字符串,缓冲区和全局变量,同时也包括通过静态连接到应用程序的静态库函数中的缓冲区。这些对C程序员来说都不陌生,但是在Windows CE下,这是最后一块可以在RAM之外压缩的空间(译者注:作者的意图是尽可能压缩内存占有率)。Windows CE分配给应用程序两块RAM中的内存块存放静态数据,一个是可读写数据(read/write data)和只读数据(read only data)。因为这些区域是基于页分配的,所以你可以在一页的静态数据开始到下一页开始之间找到一些剩余空间。细微调整Windows CE应用程序就是要写满这些剩余的空间。如果你在静态数据区有空间,最好把一个或两个缓冲区放到静态数据区,避免动态分配缓冲区。另一个值得考虑的事情是你是否在写一个基于ROM的应用程序。你要把尽可能多的数据移到只读静态数据区。Windows CE不会分配只读的RAM给基于ROM的应用程序。并且,ROM页会直接映射到虚拟地址空间。这实际上就给你了一个无限制的只读空间,而且不会影响到应用程序对RAM的需求。确定静态数据区大小的方法是查看连接器产生的映象(map)文件。映象文件主要用于调试(debug)目的来确定函数和数据的位置。但是如果你知道查看什么地方的话,它也可以用来显示静态数据的大小。列表7-1显示了一个由Visual C++产生的示例映象文件的一部分。列表7-1。映象文件的顶部显示了应用程序数据段的大小memtestTimestamp is 34ce4088(Tue Jan 27 12:16:08 1998)Preferred load address is Start Length Name Class0001: H.text CODE0002: H.rdata DATA0002: H.xdata DATA0002: H.idata DATA0002: c H.idata DATA0002: f4H.idata DATA0002: eeH.idata DATA0002: H.edata DATA0003: f4H.idata DATA0003: f4 H.CRT$XCA DATA0003: f8 H.CRT$XCZ DATA0003: fc H.CRT$XIA DATA0003: H.CRT$XIZ DATA0003: H.CRT$XPA DATA0003: H.CRT$XPZ DATA0003: c H.CRT$XTA DATA0003: 10 H.CRT$XTZ DATA0003: e8H.data DATA0003: fc cH.bss DATA0004: e8H.pdata DATA0005: f0H.rsrc DATA0005: f0 H.rsrc DATAAddress Publics by Value Rva+Base Lib:Object0001: _WinMain fmemtest.obj0001: c_InitApp cf memtest.obj0001: d4 _InitInstance d4 fmemtest.obj0001: _TermInstance fmemtest.obj0001: _MainWndProc fmemtest.obj0001: b0 _GetFixedEquiv b0 fmemtest.obj0001: _DoCreateMain fmemtest.obj. 在列表7-1中的映象文件指出了EXE文件有五个区。区0001是文本段,包含程序中可执行的代码。区0002包含只读(read-only)静态数据。区0003包含可读写(read/write)静态数据。区0004包含调用其他DLL的固定表。最后,区0005是资源区,包含应用程序的资源,例如菜单和对话框模板。让我们来看看.data,.bss和.rdata行。.data区包含已初始化的可读写数据。如果你这样初始化了一个全局变量:static HINST g_hLoadlib=NULL;g_loadlib变量将结束在.data段末尾。.bss段包含未初始化的可读写数据。一个缓冲被定义如下:static BYTE g_ucItems[256];以.bss段为结尾。最后一个段.rdata,包含只读数据。你使用const关键字定义的静态数据结束在.rdata段。有一个结构的例子,使我用来作消息查询表的://Message dispatch table for MainWindow

文档评论(0)

2017meng + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档