簡單理解動態記憶體分配和靜態記憶體分配的區別
在涉及到記憶體分配時,我們一般都要考慮到兩種記憶體分配方式,一種是動態記憶體分配,另一種是靜態記憶體分配,我們該怎麼理解這兩者的區別呢?
在我看來,靜態記憶體分配和動態記憶體分配比較典型的例子就是陣列和連結串列,陣列的長度是預先定義好的,在整個程式中是固定不變的,所以他在記憶體分配時是以靜態記憶體分配的方式進行的。而連結串列,它的資訊有可能會隨時更改,記憶體的分配取決於我們實際輸入的資料,這樣就用到了動態記憶體分配的方式。
靜態記憶體分配是在程式編譯或者執行過程中,按事先規定的大小分配記憶體空間的分配方式,他的前提的必須事先知道所需記憶體空間的大小,它的記憶體分配在棧區和全域性變數區。
動態記憶體分配是按輸入資訊的大小分配所需要的記憶體單元,他的特點是按需分配,記憶體分配在堆區。
為了便於理解我們來舉個小例子,靜態記憶體分配和動態記憶體分配的方式我們可以比作我們去旅遊,旅遊之前沃恩肯定要做的事情是帶好錢,現在我們有兩種帶錢的方式,一種是一次性的帶足夠的錢,另一種是先帶一點錢,足夠我們買飛機票到達旅遊的地點,當我們看到什麼需要買的東西時,打電話給自己的親人或者朋友,讓他們給你打過你足夠買你需要東西的錢。我們可以看到,你要是隻要一次錢,你只能是提前做好預算,只能是比你計劃的所需要的錢要多,而且只能多不能少,否則的話,你到了旅遊的地方將不能再回到你的家,這是一點。而需要多少錢就讓親朋好友打多少錢的方式在我們看來很是笨重,但是我們這裡只是要說明動態記憶體分配的特點,動態記憶體分配是按照我們需要多少錢就給我們送多少錢。
在這裡我們可以考慮一下兩者的執行速率和記憶體空間分配的問題,由上面的例子我們可以很直白的看出,靜態記憶體分配比動態記憶體分配的速率要高不少,但是我們也看到,靜態記憶體分配的方式有可能會有記憶體剩餘也就是有可能會有我們不使用的記憶體空間,這樣就造成了記憶體的浪費。
相關文章
- 動態記憶體分配記憶體
- C++動態記憶體分配C++記憶體
- 靜態方法和普通的成員方法||分配記憶體空間的區別記憶體
- C++ 指標動態記憶體分配C++指標記憶體
- Go記憶體分配和GC的理解Go記憶體GC
- 深度理解glibc記憶體分配記憶體
- javascript堆疊記憶體分配的區別JavaScript記憶體
- 記憶體分配策略中,堆和棧的區別記憶體
- Pytorch視訊記憶體動態分配規律探索PyTorch記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- 深入理解golang:記憶體分配原理Golang記憶體
- Java記憶體區域與分配策略Java記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- JVM垃圾回收和記憶體分配策略JVM記憶體
- java-方法記憶體分配Java記憶體
- go記憶體分配器Go記憶體
- java基礎-記憶體分配Java記憶體
- hadoop 記憶體分配規則Hadoop記憶體
- C語言-記憶體分配C語言記憶體
- 記憶體分配策略學習記憶體
- C語言的記憶體分配C語言記憶體
- C中的記憶體分配模型記憶體模型
- 自動識別Android不合理的記憶體分配Android記憶體
- MySQL記憶體管理,記憶體分配器和作業系統MySql記憶體作業系統
- C和C++的動態記憶體管理的區別C++記憶體
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- 【Java】 記憶體分配全面淺析Java記憶體
- JVM GC 與 記憶體分配策略JVMGC記憶體
- 記憶體分配問題處理記憶體
- mimalloc記憶體分配程式碼分析記憶體
- [20210126]探究oracle記憶體分配.txtOracle記憶體
- Netty 中的記憶體分配淺析Netty記憶體
- 小計:引用型別記憶體分配問題型別記憶體
- Python如何管理記憶體?記憶體分配機制是什麼?Python記憶體
- jvm:記憶體模型、記憶體分配及GC垃圾回收機制JVM記憶體模型GC
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- 函式指標、回撥函式、動態記憶體分配、檔案操作函式指標記憶體