1. 程式人生 > >動態分配記憶體(為什麼要動態分配內…

動態分配記憶體(為什麼要動態分配內…

在計算機的系統中有四個記憶體區域:

1)棧:在棧裡面儲存一些我們定義的區域性變數以及形參(形式引數);2)字元常量區:主要是儲存一些字元常量,比如:char *p_str=”cgat”;其中”cgat”就儲存在字元常量區裡面;3)全域性區:在全域性區裡儲存一些全域性變數和靜態變數;4)堆:堆主要是通過動態分配的儲存空間。

    動態分配的變數時儲存在堆裡面,但是這個堆的空間並不是無限大的,也許當我們編一個小的程式的時候可能我們並不能夠發現什麼,但是對於那些大的程式,如果我們比及時釋放堆的空間的時候會放生記憶體洩露。所謂記憶體洩露是因為堆的空間北我們動態分配用完了,這樣當我們再去使用動態分配堆的空間的時候就沒有足夠的空間讓我們使用了,這樣就需要佔有原來的空間,也就是會把其他的空間來儲存我們鍵入的值,這樣會導致原來儲存的資料被破壞掉,導致了記憶體的洩露了。

什麼時候要動態分配記憶體:

當你不確定記憶體空間大小的時候。。有2種辦法。
1。預先定義一個足夠大的空間。(這個比較浪費資源。而且隨著程式的使用推廣。預先定義的空間也不一定能完全滿足條件)
2。動態的分配記憶體。可以做到準確分配空間大小。不浪費資源,而且也不會發生程式不斷使用預先分配記憶體不足。
備註:動態分配的記憶體空間系統不負責自動回收,需要寫程式碼手動釋放。