今天看到一個(gè)話題:程序中節(jié)省幾KB的內(nèi)存有必要嗎?
有人說:“我在寫程序的時(shí)候,更改一個(gè)判斷語句,會(huì)提升幾毫秒,換一種方法會(huì)節(jié)省幾KB,這些有必要嗎?”
看到這個(gè)問題,我的第一反應(yīng)是——安迪-比爾定律。
安迪-比爾定律
近年來,隨著科技的飛速發(fā)展,手機(jī)、電腦等電子設(shè)備的硬件性能不斷提升,內(nèi)存容量也越來越大。
然而,許多用戶卻發(fā)現(xiàn),設(shè)備在使用一段時(shí)間后,性能開始下降,甚至變得卡頓。
這究竟是為什么呢?難道是硬件性能退化了嗎?
其實(shí),這背后隱藏著一個(gè)有趣的定律——安迪-比爾定律。
安迪-比爾定律是對(duì)IT產(chǎn)業(yè)中軟件和硬件升級(jí)換代關(guān)系的一個(gè)概括,其原話是“Andy gives, Bill takes away.(安迪提供什么,比爾拿走什么。)”。
安迪指的是英特爾前CEO安迪·格魯夫,比爾指的是微軟前任CEO比爾·蓋茨。
這句話形象地揭示了硬件和軟件之間相互制約又相互促進(jìn)的微妙關(guān)系,它的含義是,硬件性能的提升,很快就被軟件的不斷更新和膨脹所消耗殆盡。
硬件升級(jí),軟件膨脹
想象一下,你剛?cè)胧至艘豢钭钚驴畹闹悄苁謾C(jī),它擁有強(qiáng)大的處理器和充足的內(nèi)存。
你興致勃勃地下載了各種應(yīng)用程序,并期待著流暢的使用體驗(yàn)。
然而,隨著時(shí)間的推移,你發(fā)現(xiàn)手機(jī)越來越卡頓,甚至出現(xiàn)應(yīng)用程序崩潰的情況。
這并非是手機(jī)硬件性能退化所致,而是因?yàn)檐浖牟粩喔潞团蛎洠瑢?dǎo)致對(duì)硬件資源的占用越來越大。
以手機(jī)游戲?yàn)槔?,?dāng)一款游戲剛發(fā)布時(shí),它的體積相對(duì)較小,運(yùn)行流暢,不會(huì)占用太多硬件資源。
然而,隨著游戲開發(fā)商不斷更新游戲內(nèi)容,添加新的功能和特效,游戲的體積也會(huì)隨之膨脹,對(duì)手機(jī)的內(nèi)存和處理器性能要求也越來越高。
那么為什么軟件可以吃掉硬件的性能呢?
造成這種現(xiàn)象的原因,除了軟件本身的更新迭代之外,更重要的是,現(xiàn)在的應(yīng)用程序開發(fā)者,幾乎很難再有節(jié)省幾KB內(nèi)存的意識(shí)了。
在嵌入式或芯片開發(fā)領(lǐng)域,程序員需要盡可能地節(jié)省內(nèi)存空間,因?yàn)樾酒钠洗鎯?chǔ)資源非常寶貴,多出幾十KB的存儲(chǔ),都會(huì)有意想不到的系統(tǒng)性能提升。
而在應(yīng)用層開發(fā)領(lǐng)域,例如手機(jī)APP開發(fā),開發(fā)者往往不會(huì)過多關(guān)注內(nèi)存占用問題。
因?yàn)楝F(xiàn)在的手機(jī)擁有巨大的存儲(chǔ)空間,幾KB的內(nèi)存節(jié)省對(duì)于整體性能的影響微不足道。
開發(fā)者更傾向于追求功能的完善和用戶體驗(yàn)的提升,而忽視代碼優(yōu)化和內(nèi)存管理。
超級(jí)瑪麗:64KB的奇跡
與現(xiàn)在的應(yīng)用程序相比,早期的游戲開發(fā)者對(duì)內(nèi)存管理有著深刻的理解。
以經(jīng)典游戲超級(jí)瑪麗為例,這款游戲包含了豐富的關(guān)卡、劇情、配圖和配樂,但它的總大小僅為64KB!
這主要是因?yàn)?,在超?jí)瑪麗那個(gè)年代,芯片上的硬件資源非常有限,游戲開發(fā)者為了節(jié)省內(nèi)存,進(jìn)行了大量的代碼優(yōu)化和圖片復(fù)用優(yōu)化。
例如,游戲中所有的障礙物都是由多個(gè)小的正方形圖片拼接而成,而在內(nèi)存中,只存儲(chǔ)了一個(gè)正方形圖片,通過不同的排列組合來實(shí)現(xiàn)不同的障礙物。
安迪-比爾定律揭示了軟件和硬件之間的相互制約關(guān)系。
軟件的不斷更新和膨脹,會(huì)消耗硬件性能的提升,最終導(dǎo)致硬件需要進(jìn)一步升級(jí)。
然而,這種現(xiàn)象并非不可避免。如果開發(fā)者能夠更加重視代碼優(yōu)化和內(nèi)存管理,減少軟件膨脹,那么硬件性能的提升就能真正地轉(zhuǎn)化為用戶體驗(yàn)的提升。
未來,軟件開發(fā)需要更加注重資源節(jié)約和性能優(yōu)化,才能真正實(shí)現(xiàn)硬件性能的充分利用,為用戶帶來更流暢、更便捷的使用體驗(yàn)。