我們什麼時候應該使用動態記憶體

2021-06-21 01:27:58 字數 1902 閱讀 7715

我講解一下c語言中動態分配記憶體的函式,可能有些初學c語言的人不免要問了:我們為什麼要通過函式來實現動態分配記憶體呢?系統難道不是會自動分配記憶體嗎??

既然有人會問這樣的問題,那麼我在這裡好好的講解一下吧!

首先讓我們熟悉一下計算機的記憶體吧!在計算機的系統中有四個記憶體區域:1)棧:在棧裡面儲存一些我們定義的區域性變數以及形參(形式引數);2)字元常量區:主要是儲存一些字元常量,比如:char *p_str=」cgat」;其中」cgat」就儲存在字元常量區裡面;3)全域性區:在全域性區里儲存一些全域性變數和靜態變數;4)堆:堆主要是通過動態分配的儲存空間,也就是我們接下需要講的動態分配記憶體空間。

什麼時候我們需要動態分配記憶體空間呢?舉乙個例子吧。int *p; 我們定義了乙個指向int型別的指標p;p是用來儲存乙個位址的值的,我們之所以要為p這個變數分配空間是讓它有乙個明確的指向,打個比方吧!你現在做好了乙個指向方向的路標,但是你並沒有讓這個路標指向乙個確切的方位,也就是說現在的這個路標是瞎指向的,這樣我們就不能夠通過它來明確到底**是東,**是西,何為北,何為南了。雖然我們在計算機的記憶體裡定義了乙個指標變數,但是我們並沒有讓這個變數指示乙個確切int型別變數的位址,所以我們就必須要讓它有乙個明確的指示方向。這樣我們就要通過動態分配記憶體的方式來認為的規定它的方向!

我們在剛剛接觸指標的時候遇到過這樣的情況,int *p;p=&a;這種方法不是指標的動態分配記憶體,這個叫做指標變數的初始化!初始化同樣也可以讓指標變數有方向可指。int *p;p=malloc(n*sizeof(型別名稱));我們通過malloc()函式為乙個指標變數p分配了位址,這樣我們從鍵盤上鍵入的值就這樣儲存在p裡面了,接下來我們就可以對這個p進行具體的操作了,比如scanf(「%s」,p)等等。當我們對p結束操作的時候還要釋放p的記憶體空間。為什麼要釋放記憶體空間呢?在上面我已經講過動態分配的變數時儲存在堆裡面,但是這個堆的空間並不是無限大的,也許當我們編乙個小的程式的時候可能我們並不能夠發現什麼,但是對於那些大的程式,如果我們比及時釋放堆的空間的時候會放生記憶體洩露。所謂記憶體洩露是因為堆的空間北我們動態分配用完了,這樣當我們再去使用動態分配堆的空間的時候就沒有足夠的空間讓我們使用了,這樣就需要占有原來的空間,也就是會把其他的空間來儲存我們鍵入的值,這樣會導致原來儲存的資料被破壞掉,導致了記憶體的洩露了。

同時當我們使用malloc()函式的時候還應該注意當我們釋放完空間的時候還要將原先的指標變數賦予乙個null,也就是賦予乙個空指標,留著下次的時候使用它!如果我們不賦予|null行不行呢??答案是:不行的!如果我們不賦予乙個空指標這樣會導致原先的指標變數成為了乙個野指標!何謂野指標?野指標就是乙個沒有明確指向的指標,系統不知道它會指向什麼地方,野指標是很危險的,因此當我們每次使用完malloc()函式的時候都必須將指標賦予乙個空指標!相對於malloc()函式,calloc()函式就不需要我們賦予null了,這是因為在每次呼叫完calloc()函式的時候系統會自動將原先的指標賦予乙個空指標,即歸於「0」。calloc()函式的原型是void *calloc(count,sizeof(型別名稱));比如:p=(char*)calloc(4,sizeof(char));我們為p分配了指向char型指標的「4」個空間。

除了malloc()與calloc(),還有乙個動態分配空間的函式realloc()函式,這個函式比前兩個函式分配更多的空間,原型:void *realloc(void *p,size_t size);

該函式有幾個作用:

1)    如果有足夠的空間來擴充p的記憶體塊,則返回乙個指向p的指標;

2)    如果沒有足夠的空間來擴充p的記憶體塊,則為p從新分配size的空間,並把原來的內容複製給p,指向p的開頭,同時釋放原來的空間,返回乙個指向新記憶體塊的指標;

3)    如果p=null,其作用於malloc()相似;

下面舉乙個程式的例子:

#define long 10

#include

#include

#include

main()

什麼時候才應該使用HBase?

張貴賓guibin.beijing gmail.com 在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選擇,這種情況下應...

什麼時候才應該使用HBase?

在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選擇,這種情況下應當選擇傳統的關係型資料庫,因為如果這麼少的資料存入hba...

什麼時候才應該使用HBase?

在使用hbase一定要明白hbase的適用場合,因為hbase並非適用於每種情況。如 果有幾億或者幾十億條記錄要存入hbase,那麼hbase就是乙個正確的選擇 否則如果你僅有幾百萬條甚至更少的資料,那麼hbase當然不是正確的選 擇,這種情況下應當選擇傳統的關係型資料庫,因為如果這麼少的資料存入h...