簡單理解動態記憶體分配和靜態記憶體分配的區別

田園詩人之園發表於2015-06-22
在涉及到記憶體分配時,我們一般都要考慮到兩種記憶體分配方式,一種是動態記憶體分配,另一種是靜態記憶體分配,我們該怎麼理解這兩者的區別呢?
在我看來,靜態記憶體分配和動態記憶體分配比較典型的例子就是陣列和連結串列,陣列的長度是預先定義好的,在整個程式中是固定不變的,所以他在記憶體分配時是以靜態記憶體分配的方式進行的。而連結串列,它的資訊有可能會隨時更改,記憶體的分配取決於我們實際輸入的資料,這樣就用到了動態記憶體分配的方式。
靜態記憶體分配是在程式編譯或者執行過程中,按事先規定的大小分配記憶體空間的分配方式,他的前提的必須事先知道所需記憶體空間的大小,它的記憶體分配在棧區和全域性變數區。
動態記憶體分配是按輸入資訊的大小分配所需要的記憶體單元,他的特點是按需分配,記憶體分配在堆區。
為了便於理解我們來舉個小例子,靜態記憶體分配和動態記憶體分配的方式我們可以比作我們去旅遊,旅遊之前沃恩肯定要做的事情是帶好錢,現在我們有兩種帶錢的方式,一種是一次性的帶足夠的錢,另一種是先帶一點錢,足夠我們買飛機票到達旅遊的地點,當我們看到什麼需要買的東西時,打電話給自己的親人或者朋友,讓他們給你打過你足夠買你需要東西的錢。我們可以看到,你要是隻要一次錢,你只能是提前做好預算,只能是比你計劃的所需要的錢要多,而且只能多不能少,否則的話,你到了旅遊的地方將不能再回到你的家,這是一點。而需要多少錢就讓親朋好友打多少錢的方式在我們看來很是笨重,但是我們這裡只是要說明動態記憶體分配的特點,動態記憶體分配是按照我們需要多少錢就給我們送多少錢。
在這裡我們可以考慮一下兩者的執行速率和記憶體空間分配的問題,由上面的例子我們可以很直白的看出,靜態記憶體分配比動態記憶體分配的速率要高不少,但是我們也看到,靜態記憶體分配的方式有可能會有記憶體剩餘也就是有可能會有我們不使用的記憶體空間,這樣就造成了記憶體的浪費。

相關文章