程序中提升几毫秒、节省几KB的内存有必要吗?

2024-09-11 08:00:00 浏览数 (600)

今天看到一个话题:程序中节省几KB的内存有必要吗?

有人说:“我在写程序的时候,更改一个判断语句,会提升几毫秒,换一种方法会节省几KB,这些有必要吗?”

看到这个问题,我的第一反应是——安迪-比尔定律。


安迪-比尔定律


近年来,随着科技的飞速发展,手机、电脑等电子设备的硬件性能不断提升,内存容量也越来越大。

然而,许多用户却发现,设备在使用一段时间后,性能开始下降,甚至变得卡顿。

这究竟是为什么呢?难道是硬件性能退化了吗?

其实,这背后隐藏着一个有趣的定律——安迪-比尔定律。

安迪-比尔定律是对IT产业中软件和硬件升级换代关系的一个概括,其原话是“Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)”。

安迪指的是英特尔前CEO安迪·格鲁夫,比尔指的是微软前任CEO比尔·盖茨。

这句话形象地揭示了硬件和软件之间相互制约又相互促进的微妙关系,它的含义是,硬件性能的提升,很快就被软件的不断更新和膨胀所消耗殆尽。


硬件升级,软件膨胀  


想象一下,你刚入手了一款最新款的智能手机,它拥有强大的处理器和充足的内存。

你兴致勃勃地下载了各种应用程序,并期待着流畅的使用体验。

然而,随着时间的推移,你发现手机越来越卡顿,甚至出现应用程序崩溃的情况。

这并非是手机硬件性能退化所致,而是因为软件的不断更新和膨胀,导致对硬件资源的占用越来越大。

以手机游戏为例,当一款游戏刚发布时,它的体积相对较小,运行流畅,不会占用太多硬件资源。

然而,随着游戏开发商不断更新游戏内容,添加新的功能和特效,游戏的体积也会随之膨胀,对手机的内存和处理器性能要求也越来越高。

那么为什么软件可以吃掉硬件的性能呢?

造成这种现象的原因,除了软件本身的更新迭代之外,更重要的是,现在的应用程序开发者,几乎很难再有节省几KB内存的意识了。

在嵌入式或芯片开发领域,程序员需要尽可能地节省内存空间,因为芯片的片上存储资源非常宝贵,多出几十KB的存储,都会有意想不到的系统性能提升。

而在应用层开发领域,例如手机APP开发,开发者往往不会过多关注内存占用问题。

因为现在的手机拥有巨大的存储空间,几KB的内存节省对于整体性能的影响微不足道。

开发者更倾向于追求功能的完善和用户体验的提升,而忽视代码优化和内存管理。


超级玛丽:64KB的奇迹  


与现在的应用程序相比,早期的游戏开发者对内存管理有着深刻的理解。

以经典游戏超级玛丽为例,这款游戏包含了丰富的关卡、剧情、配图和配乐,但它的总大小仅为64KB!


12


这主要是因为,在超级玛丽那个年代,芯片上的硬件资源非常有限,游戏开发者为了节省内存,进行了大量的代码优化和图片复用优化。

例如,游戏中所有的障碍物都是由多个小的正方形图片拼接而成,而在内存中,只存储了一个正方形图片,通过不同的排列组合来实现不同的障碍物。



安迪-比尔定律揭示了软件和硬件之间的相互制约关系。

软件的不断更新和膨胀,会消耗硬件性能的提升,最终导致硬件需要进一步升级。

然而,这种现象并非不可避免。如果开发者能够更加重视代码优化和内存管理,减少软件膨胀,那么硬件性能的提升就能真正地转化为用户体验的提升。

未来,软件开发需要更加注重资源节约和性能优化,才能真正实现硬件性能的充分利用,为用户带来更流畅、更便捷的使用体验。