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