10、编程珠玑笔记十节省空间
本篇名言:“积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。”
欢迎转载,转载请标明出处:http://blog.youkuaiyun.com/notbaron/article/details/48420257
之前的算法都是关于加速程序的,这章中主要讲诉如何节省程序空间。
简单性可以衍生出功能性、健壮性以及速度和空间。最早的UNIX是运行在8192个18位字的机器上开发的。他们在论文中提到:
“在系统及其软件方面,总是存在着相当严重的空间约束。如果同时对合理的效率和强大的能力提出要求,那么空间约束不仅具有经济上的意义,还会使设计更优雅一些。”
通过使得问题简单化,可以将复杂问题简单化。同时节省大量的存储空间。
作者举了个例子,来节省存储空间蛤蟆觉得很巧妙。
关于这个矩阵如下图1
可以通过200X200=40000个元素来存储。假设每个元素32位,那差不多是160KB的空间。
通过巧妙构思,使用3个数组来实现。图2
第i列中的点由数组row和pointnum中位于firstincol[i]和firstincol[i+1]-1之间的元素表示。
Firstincol 只有200个元素,row数组和pointnum数组的数量一致都是总共拥有的实际数的数量。这里充分利用稀疏数据结构特点。
此外row的数组中的元素都是小于200的,实际可以使用单字节来实现。
最后作者给出里关于数据和程序的空间技术。
1. 关于数据空间技术
l 不存储,重新计算。 使用计算来换取空间。
l 稀疏数据结构。
l 信息压缩。通过压缩的方式对对象进行编码,以减少存储空间。
l 分配策略。有时空间的使用方式比使用量更重要。
l 垃圾回收。对废弃的存储空间进行回收再利用。
2. 关于代码空间技术
l 函数定义。通过用函数替换代码中的常见模式可以简化程序,减少空间需求。微软删除了很少使用的函数,将整个windows 系统压缩为更加紧凑的Windows CE.
l 解释程序。用解释程序来替换一长行的程序文本。
l 翻译成机器语言。这个性价比比较低,一般用于内存宝贵的系统,如DSP。