5分钟看懂安迪比尔定律

大家好,我是董董灿。

今天跟大家聊一个,在写程序的过程中节省内存的这个话题。

话题来源于一个小伙伴问:我在写程序的时候,更改一个判断语句,会提升几毫秒,换一种方法会节省几KB,这些有必要吗

这里涉及到一个软件与硬件互相依赖的关系问题。看到这个问题,我的第一反应是一个定律------安迪-比尔定律。

安迪-比尔定律

安迪-比尔定律(Andy and Bill's Law) 是对 IT 产业中软件和硬件升级换代关系的一个概括。

原话是 "Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。)" 。

安迪指英特尔前 CEO 安迪·格鲁夫,比尔指微软前任 CEO 比尔·盖茨,这句话的意思是:硬件提高的性能,很快就会被软件消耗掉

你有没有觉得1年前买的手机,在更新了几代系统或者软件后,突然变的卡的要死,比如手机的王者荣耀越更新内存占用越大。

这背后都是安迪比尔定律在搞事情,硬件和软件的关系,就像是一对欢喜冤家。

硬件的升级会导致软件开发越来越随意,但同时,由于软件开发的随意,会反过来逼迫硬件的进一步升级。

举个例子

在苹果 7 刚出的时候,手机运存 8 个GB,这时候某游戏出了某个版本,就叫它A 版本吧。

这个时候,A 版本安装完,运行游戏要占 3 GB。我们拿着苹果 7 玩的很舒适,也不卡,因为运存 8GB 还很大。

这个时候,某游戏项目组 A 程序猿:"我们要增加新功能,添加新特性,要不要把没用的代码都删了啊?"

某游戏项目组B程序猿:"不用,现在的手机都8G运存,至少128G内存,够使的,我们直接加特性就行,再说了,把原来无用代码删了,不怕出bug吗。"

于是,某游戏经过几个大小版本的迭代,变成了 B 版本,手机一更新,安装完占10GB,运行时占 6GB。

完了,苹果 7 有点吃不消了,带不动了怎么办,我还想玩某游戏,只能换手机。这时候苹果 8 也出了,16G 运存够使了。

苹果 7 手机的硬件的性能,就这么被某游戏的不断的更新给吃掉了。

这也就是:Andy gives, Bill takes away。

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

除了软件不断更新,添加新的特性之外,更重要的是,现在的应用程序开发者,几乎很难再有节省几KB 内存的意识了。

我做过芯片开发,要知道,芯片的片上存储是很珍贵的,多出几十KB的存储,就会有意想不到的系统性能提升。

而做应用开发,几乎不会注意到这么底层的存储资源,因为现在电脑、手机的存储都动辄几个GB 的存储,比 KB 大好几个数量级!

所以说,几 KB 的内存节省,看你做什么级别的开发。

  • 如果嵌入式或芯片开发,那么完全有必要节省

  • 如果像应用层比如手机APP开发,确实必要性不大,虽然这么说不太好,但是,正是软件的无节制生长,才会倒逼硬件进一步研发更新一代的架构和存储。

超级玛丽

超级玛丽这款游戏,我们玩了很多年,游戏中那么多关卡,那么丰富的剧情,丰富的配图,丰富的配乐,但是你能想象,这款游戏的总大小才64KB么?

64KB包含了游戏所有的代码、图形和音乐!

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

你所看到的图片中的障碍物,其实都是多个小的正方形图片的拼接,而在内存中,只存储了一个。

相关推荐
黑客-雨17 小时前
DeepSeek-V3.2深度拆解:开源模型逆袭,GPT-5迎来劲敌!
人工智能·程序员·大模型·知识图谱·agent·大模型教程·deepseek-v3.2
紫雾凌寒1 天前
【 HarmonyOS 高频题】2026 最新 ArkUI 开发与组件面试题
ui·华为·面试·程序员·职场发展·harmonyos·ark-ui
IT技术分享社区3 天前
GTID 结构升级 + JSON 视图强化,MySQL 9.6 创新版带来哪些性能提升?
数据库·程序员
小阿鑫3 天前
32岁程序员猝死背后,我的一些真实感受
前端·后端·程序员·代码人生
十年编程老舅4 天前
虾皮C++一面:C++四种类型转换详解
程序员·编程·c/c++
紫雾凌寒4 天前
【 HarmonyOS 面试题】2026 最新 ArkTS 语言基础面试题
华为·面试·程序员·华为云·职场发展·harmonyos·arkts
程序员鱼皮6 天前
20 个神级 AI 编程扩展,爽爆了!
ai·程序员·编程
一晌小贪欢9 天前
Python 异步编程深度解析:从生成器到 Asyncio 的演进之路
开发语言·python·程序员·python基础·python小白·python测试
京东云开发者10 天前
如何使用wireshark进行远程抓包
程序员
京东云开发者10 天前
InheritableThreadLocal从入门到放弃
程序员