(一)malloc.
原型 extern void *malloc(unsigned int num_bytes);
標頭檔案:
#include
#include
功能:
請求系統動態分配num_bytes個位元組的空間,如果分配成功則返回第乙個位元組的位址,並且可以進行強制型別轉換,告訴系統分配空間中儲存的是那種型別的資料。否則返回空指標null。
注意:當記憶體不再使用時,應使用free()函式將記憶體塊釋放。
(二):ralloc
原型:extern void *realloc(void *mem_address,unsigned int newsize);
標頭檔案:#include
功能:
先判斷當前的指標是否有足夠的連續空間,如果有,擴大mem_address指向的位址,並且將mem_address返回,如果空間不夠, 先按照newsize指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來mem_address所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。
返回值:
如果重新分配成功則返回指向被分配記憶體的指標,否則返回空指標null。
注意:
當記憶體不再使用時,應使用free()函式將記憶體塊釋放。
小結:
1. ralloc失敗的時候,返回null
2. ralloc失敗的時候,原來的記憶體不改變,不會釋放也不會移動
3. 假如原來的記憶體後面還有足夠多剩餘記憶體的話,ralloc的記憶體=原來的記憶體+剩餘記憶體,ralloc還是返回原來記憶體的位址;假如原來的記憶體後面沒有足夠多剩餘記憶體的話,ralloc將申請新的記憶體,然後把原來的記憶體資料拷貝到新記憶體裡,原來的記憶體將被free掉,ralloc返回新記憶體的位址
4. 如果size為0,效果等同於free()。
5. 傳遞給realloc的指標必須是先前通過malloc(), calloc(),或realloc()分配的
6.傳遞給realloc的指標可以為空,等同於malloc。
(三)calloc
函式原型:void *calloc(size_t n, size_t size);
標頭檔案 :#include
、#include
其三者之間的區別:
(1)函式malloc不能初始化所分配的記憶體空間,也就是說malloc分配好空間後要對所分配的空間進行清理。而函式calloc() 會將所分配的記憶體空間中的每一位都初始化為零,也就是說,如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;
(2)函式malloc向系統申請分配指定size個位元組的記憶體空間.返回型別是 void*型別.void*表示未確定型別的指標. void* 型別可以強制轉換為任何其它型別的指標.
實現原理:
將可用的記憶體連線為乙個長長的鍊錶(即所謂的空閒鍊錶)。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊,然後將該記憶體塊一分為二(一塊的大小與使用者申請的大小一樣,另一塊就是剩下的位元組),接下來,將分配給使用者的那塊記憶體傳給使用者,並將剩下的那塊(如果有的話),返回到鍊錶上,呼叫free函式時,它將使用者釋放的記憶體塊連線到空鏈上,到最後,空閒鍊錶會被切成很多的小記憶體片段,如果這時使用者申請乙個大的記憶體片段,那麼空閒鏈上可能沒有可能滿足使用者要求的片段了,於是malloc函式請求延時,並開始在空間中翻箱倒櫃的檢查記憶體片段,對它們進行整理,並將相鄰的小空閒塊合成較大的記憶體塊
GetSystemMetrics 函式的用法
可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...
GetSystemMetrics 函式的用法
可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...
GetSystemMetrics 函式的用法
可以用getsystemmetrics函式可以獲取系統解析度,但這只是其功能之一,getsystemmetrics函式只有乙個引數,稱之為 索引 這個索引有75個識別符號,通過設定不同的識別符號就可以獲取系統解析度 窗體顯示區域的寬度和高度 滾動條的寬度和高度。為了使使getsystemmetric...