簡單理解動態記憶體分配和靜態記憶體分配的區別
在涉及到記憶體分配時,我們一般都要考慮到兩種記憶體分配方式,一種是動態記憶體分配,另一種是靜態記憶體分配,我們該怎麼理解這兩者的區別呢?
在我看來,靜態記憶體分配和動態記憶體分配比較典型的例子就是陣列和連結串列,陣列的長度是預先定義好的,在整個程式中是固定不變的,所以他在記憶體分配時是以靜態記憶體分配的方式進行的。而連結串列,它的資訊有可能會隨時更改,記憶體的分配取決於我們實際輸入的資料,這樣就用到了動態記憶體分配的方式。
靜態記憶體分配是在程式編譯或者執行過程中,按事先規定的大小分配記憶體空間的分配方式,他的前提的必須事先知道所需記憶體空間的大小,它的記憶體分配在棧區和全域性變數區。
動態記憶體分配是按輸入資訊的大小分配所需要的記憶體單元,他的特點是按需分配,記憶體分配在堆區。
為了便於理解我們來舉個小例子,靜態記憶體分配和動態記憶體分配的方式我們可以比作我們去旅遊,旅遊之前沃恩肯定要做的事情是帶好錢,現在我們有兩種帶錢的方式,一種是一次性的帶足夠的錢,另一種是先帶一點錢,足夠我們買飛機票到達旅遊的地點,當我們看到什麼需要買的東西時,打電話給自己的親人或者朋友,讓他們給你打過你足夠買你需要東西的錢。我們可以看到,你要是隻要一次錢,你只能是提前做好預算,只能是比你計劃的所需要的錢要多,而且只能多不能少,否則的話,你到了旅遊的地方將不能再回到你的家,這是一點。而需要多少錢就讓親朋好友打多少錢的方式在我們看來很是笨重,但是我們這裡只是要說明動態記憶體分配的特點,動態記憶體分配是按照我們需要多少錢就給我們送多少錢。
在這裡我們可以考慮一下兩者的執行速率和記憶體空間分配的問題,由上面的例子我們可以很直白的看出,靜態記憶體分配比動態記憶體分配的速率要高不少,但是我們也看到,靜態記憶體分配的方式有可能會有記憶體剩餘也就是有可能會有我們不使用的記憶體空間,這樣就造成了記憶體的浪費。
相關文章
- 動態記憶體分配記憶體
- C++ 動態記憶體分配C++記憶體
- 動態分配記憶體地址(.NET)記憶體
- C++動態記憶體分配C++記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- C語言(動態記憶體分配)C語言記憶體
- 靜態方法和普通的成員方法||分配記憶體空間的區別記憶體
- 記憶體分配知識(全域性,區域性,靜態變數)記憶體變數
- Go記憶體分配和GC的理解Go記憶體GC
- javascript堆疊記憶體分配的區別JavaScript記憶體
- 記憶體分配策略中,堆和棧的區別記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- 深度理解glibc記憶體分配記憶體
- JavaScript記憶體分配JavaScript記憶體
- JVM記憶體分配JVM記憶體
- java記憶體分配Java記憶體
- 簡單分配和釋放記憶體指令碼[更新]記憶體指令碼
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- Pytorch視訊記憶體動態分配規律探索PyTorch記憶體
- Oracle的記憶體分配和使用Oracle記憶體
- Memcache 記憶體分配策略和效能(使用)狀態檢查記憶體
- 智慧指標的模板,用來管理動態分配的記憶體指標記憶體
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- 深入理解golang:記憶體分配原理Golang記憶體
- 探索iOS記憶體分配iOS記憶體
- Java 記憶體分配策略Java記憶體
- java jvm 記憶體分配JavaJVM記憶體
- [C++]記憶體分配C++記憶體
- C語言malloc()函式:動態分配記憶體空間C語言函式記憶體
- 記憶體分配的確定記憶體
- weblogic的記憶體分配Web記憶體
- 【S13】vector和string優先於動態分配的記憶體記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- malloc,calloc,realloc等記憶體分配函式區別記憶體函式
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- java基礎-記憶體分配Java記憶體
- C語言-記憶體分配C語言記憶體