Embedded 版 (精华区)

发信人: redfox (NetAnt), 信区: Embedded_system
标  题: 优化Windows CE 程序2/3
发信站: 哈工大紫丁香 (2001年07月01日22:53:30 星期天), 转信

  



静态内存

另一种可以用来减少一个程序的内存占用的内存类型。程序的静态内存是在编译时刻静态
声明的。

同系统中的其它内存一样,分配给静态数据的基本单元是处理器的页面大小。这意味着如
果一个程序有一个字节的静态分配数据,系统分配一个页面(1K 或 4K,取决于CPU类型
)给数据。编译器典型的分配一些静态数据给自己,所以整个减少静态数据很困难,但知
道分配了多少将有助于你管理它。有时重复应用一个页面中剩余的静态数据空间比动态分
配内存要好。

一个Windows CE程序在编译时分配两个静态数据段,一个是变量静态数据,一个是常量静
态数据。每一段都有自己的页面空间,在程序装入内存时分配。移动常量数据到剩余的静
态数据池可能很有益,如果这样做,会减少包含常量数据所必需的页面数。但你不会想要
移动一个从ROM中执行的程序的页面数据,因为这样的程序保持它的常量数据和段的大小
与程序用了多少RAM并没有影响。并且,在写一个要在ROM中执行的程序时,你应该指定尽
可能多的常量。静态数据段的剩余空间可以被其它的可写数据更好的利用。

要查看分配给编译器的静态数据段大小,看map文件。在Virtual C++ 5.0中,map文件是
在Project Settings 对话框中的link页面中选中来创建的。图1的一个map文件的碎片显
示了应该检查的三行。.rdata行显示只读数据段的大小(十六进制)。data 行显示初始
化数据段的大小,bss行显示未初始化的数据段的大小。当程序被装载时,装载者将把
data 和.bss段结合成一个段,所以读/写数据的关键数是data和bss的总体。

Rdata和读/写数据段不应该超过你的目标处理器的页面大小值。既然你可能想让你的大多
数程序运行在任何处理器上,key values是1,024 (16进制数是400) 和4,096 (16进制数
是1000)。从一个静态变量的声明移走关键词常量就是将变量从只读(.rdata)段移到读写
(.data)段。对于产生图1所示的map文件的程序来说,只读段是120 (16进制数是78)字节
大小,读/写段是908 (16进制数是38C )字节。累计到下一页面的开始,在一个NEC R4100
 CPU的系统中,两段总共是1,024字节。

尽管保存1K的RAM也许看起来并不是一个很大的成功,但在一个HPC或其它的Windows CE设
备中内存的缺乏不能被过分强调。设备可能只有1MB 的RAM可供系统RAM使用,操作系统可
用600K或更多。由于在关闭(或暂停)设备时你并没有关掉程序,所以Windows CE的暂停
/重置特性有利于squeeze。你可以运行好多天没有碰过的程序。如释放PC机的硬盘空间,
用户几乎不关心HPC的可用RAM除非已没有足够的空间完成一些任务。那时——也只有那时
——用户将关闭一些程序来腾出空间。



--
 发展Linux 逃离MicroSoft !

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.848毫秒