Talking about 也说内存

Syeerzy在blog里有讲他关于程序内存使用的看法,认为为了追求速度的提高,有必要“充分利用内存”。

这是似是而非而且荒谬的结论,而且同样极端了。

不管内存有多少G了,相比硬盘比还是很小。所以在完成任务目的,保证用户可接受的速度下,优化内存当然是性能的一个重要指标了。写程序的时候永远无法知道运行这个程序时的计算机情况,当然能节省则要节省了,一般程序很少去智能调整自己内存占有,优化程序的内存使用是现代操作系统的重要任务。节省越多的内存,意味着可以同时并存更多的程序,这是为用户负责的一种表现。

举个极端的例子,程序A完成既定任务用1M内存在多数配置机器上可以比较流畅的运行了,这时目标机器上还有2G的内存可用,OK,照“充分利用内存”的说法,意思就是最好将2G都“充分”用起来,OK,程序A充分用了1G的内存(嗯,程序A load了除了必要的执行代码和必要的数据,将潜在操作有可能用到的文件也顺便load进来了,这样对1%的用户来讲可能提升了 0.0001%的速度,这符合“充分使用内存”吧),目标机器上还有1G剩余的(幸好不是只剩1K内存了)。问题是,1M内存使用的时候速度已经不错了,用1G内存提升的速度并不明显。但为了这一点速度上的优化被你“充分”占了1G的内存。目标机器接下去还要再运行一个专业软件,而这个软件需要load一个1G的数据进内存,my god,stupid的操作系统接下去做的事情就能让你发疯。就是因为程序A根本无法预料到用户机器的情况,从而根本无法做到“充分”利用。你能做的就是,保证性能的前提下,尽量优化内存使用,尤其对于大型程序来讲。

让程序去根据内存可获取情况自动调整自己的内存占有情况? 当然可以,但有这时间,不如去开发更多的大家需要的功能。而且操作系统已经具备多数情况下行之有效的算法去优化这些程序的内存使用,尽管有时候很stupid。

“所以,最终结论是”,即使“在内存使用不超出最大物理内存的情况下,比如在大内存的PC机上(大内存指内存接近或超过4G—4G是32位地址的范围,比如2G或3G或8G)”,也不能为了一点点的速度提升去“充分”利用内存。“内存多使用并不是什么错,不要再把内存使用多少作为性能标准了”,这是对的,但“我们追求的性能”不仅仅是“速度”,还有对用户负责的一种态度。——除非,增加内存使用可以明显提高各方面的性能,那又是另一个story了。

Leave a Reply

Your email address will not be published. Required fields are marked *