C/C++編程筆記:動態(tài)存儲分配究竟是怎么回事?最通俗的理解
以前我們先接觸到數(shù)組,知道這是一種靜態(tài)分配的方式,在程序執(zhí)行前需要多少存儲單元都是要提前規(guī)劃好的,使用過程中需要再分配或者對多余內(nèi)存進(jìn)行回收是不方便的。
接著我們引入了動態(tài)存儲分配,這種方式正好和靜態(tài)分配的方式相對應(yīng),可以按需分配,動態(tài)回收。

這么講可能過于抽象,我們來類比一個不太貼切的例子。
上廁所的時候,需要用紙。那么靜態(tài)分配就相當(dāng)于上廁所前憑借生活經(jīng)驗,預(yù)先扯一段紙,可能是3塊也許是4塊。
但是如果有一些意外情況,你扯的紙不夠用,你沒辦法回到拿紙的地方再多一段;或者你扯的紙多了,也沒辦法把多余出來的紙接回原來的紙卷。
當(dāng)然涉及到一些細(xì)節(jié)的地方,動態(tài)分配和靜態(tài)分配可能沒這么簡單。

比如用紙的例子里,就算紙不夠用,你湊合一下也許是可以的——但是計算機(jī)沒那么聰明,在一些程序里,內(nèi)存不夠就是不夠,計算機(jī)會耿直地回答你:內(nèi)存不夠,程序不能運(yùn)行!
甚至在另一些情況下,比如說內(nèi)存中一次拿不出這么多連續(xù)的單元,同樣也會報錯,無法運(yùn)行。當(dāng)然這是開發(fā)者出于安全的考慮,有意把程序設(shè)計成這個樣子,但還是未免太“軸”了。
那么我們的動態(tài)分配呢?它就相當(dāng)于去廁所時候,直接把一卷紙拿過去,用一段扯一段。完全不挑剔這一段和上一段是不是接連著的,非常的人性化。
看起來很完美,是嗎?但是它也有缺點:首先,這一種操作其實在數(shù)據(jù)組織形式和遍歷時候會更加麻煩,特別是對初學(xué)者不是很友好;其次,如果你想要精確定位自己擁有的內(nèi)存單元是哪一個時候,只能從頭到尾去順藤摸瓜。

其實客觀上是提升了工作難度,在有些工作環(huán)境下,有種把簡單問題復(fù)雜化的感覺,也會一定程度上會降低程序執(zhí)行的效率。
希望大家在學(xué)習(xí)過程中把抽象的知識結(jié)合利用自己的生活經(jīng)驗,類比類推,加深理解,強(qiáng)化認(rèn)知,讓學(xué)習(xí)變得好玩起來,有趣起來。
正所謂學(xué)習(xí)是最好的老師!祝愿同學(xué)們在以后的學(xué)習(xí)過程中能夠有所收獲,有所感悟,不要局限于課本上四死板的概念,而要靈活多變,在有趣貼合自己的理解方式中成長、進(jìn)步。
感謝閱讀,學(xué)習(xí)使人強(qiáng)大!
自學(xué)C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項目的水平,歡迎一起共同成長!

另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程(含C語言編程入門教程全套),有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會對你有幫助的~