2009年2月24日星期二

果然是喜忧参半

今天编码、调试,终于将更新后的driver并入了项目,完成了编译和试验。本来我以为节约了20多M内存,但是今天发现原来昨天的计算有误,实际只节约了12M内存,真是令人有些沮丧。

随后我统计了一下,登入游戏以后系统中有近1M条指令,于是我将指令中的两个字段精简掉了,从而节省了8M空间,和之前的加在一起,倒是达到了20M的目标。

现在仍然需要进一步优化,可行的道路有两条:
1. 继承时进行代码复用
目前在继承时拷贝了代码,这样的好处是执行更快,加载对象时不会因为基类的变化而载入错误。若容忍微小的效率损耗,那么可以换得一定空间上的节约。我没有仔细研究该项优化工作能够节约的空间,但是我预估能节省10M左右的空间。

2. 将源文件信息用更精简的结构存放
目前我简单的将所有的指令都对应了一份源信息(文件名 & 行号),对1M的指令节点来说,也就是使用了8M的空间。倘若优化这部分工作,应该可以节约其中的4/5,也就是节省6M左右的空间。

如果将前两项合并,那么可能可以节约13M的空间。

3. 使用RISC指令模式
目前所有的指令均采用一个32位(opcode),两个32位的操作数(operand)。倘若使用RISC模式,可以压缩opcode,并且根据opcode跟随0-2个操作数。

这个的缺点将处理代码会复杂很多,并且如果使用gdb切入时,阅读也变得更加困难。如果在前两项的基础上再使用这个技术,应该可以再节约3M的空间。

考虑到复杂性和实际的效果,我对方案3的兴趣不大。

明天值得仔细考虑一下1、2两个方案。

没有评论:

发表评论