1. 名稱:malloc / calloc
功能:動態記憶體分配函式
標頭檔案:#include
函式原型:void *malloc(size_t size);
void *calloc(int num, size_t size);
其中:num為分配記憶體塊的個數,size為分配記憶體塊的大小
返回值:分配成功返回分配記憶體塊的首位址,失敗返回null。
區別:(1)malloc一次只能申請乙個記憶體區,calloc一次可以申請多個記憶體區;
(2)malloc不會對分配的記憶體初始化,calloc會初始化為0。
2. 名稱:free
功能:動態記憶體釋放函式
標頭檔案:#include
函式原型:void free(void *ptr);
ptr為malloc或calloc等記憶體分配函式返回的記憶體指標。
返回值:無
注:malloc和calloc跟free是一一對應的關係,若動態分配記憶體沒有free釋放,容易造成記憶體洩露。
3. 名稱:memcpy
功能:拷貝記憶體空間
標頭檔案:#include
函式原型:void *memcpy(void *dest, void *src, size_t n);
其中:dest為目標記憶體區,src為源記憶體區,n為需要拷貝的位元組數
返回值:指向dest的指標
侷限性:未考慮記憶體重疊情況
函式實現:
[cpp]view plain
copy
void
*memcpy(
void
*dest,
void
*src,
size_t
n)
return
ret;
}
4. 名稱:memmove
功能:拷貝(移動)記憶體空間
標頭檔案:#include
函式原型:void *memmove(void *dest, void *src, size_t n);
其中:dest為目標記憶體區,src為源記憶體區,n為需要拷貝的位元組數
返回值:指向dest的指標
相比memcpy:當dest與src重疊時,仍能正確處理,但是src內容會被改變
函式實現:
[cpp]view plain
copy
void
*memmove(
void
*dest,
void
*src,
size_t
n)
} else
} return
ret;
}
5. 名稱:memset
功能:初始化指定記憶體空間
標頭檔案:#include
函式原型:void *memset(void *buffer, int c, size_t n);
其中:buffer為分配的記憶體,c為初始化你內容,n為初始化的位元組數
返回值:指向buffer的指標
特別注意:memset是按位元組為單位對buffer指向的記憶體賦值
例:int a[5];
memset(a, 3, 5*sizeof(int)); //錯誤
上述情況下每個int元素被初始化為:00000011 00000011 00000011 00000011
memset(a, 0, 5*sizeof(int)); //正確,全部初始化為0
6. 名稱:memcmp
功能:比較兩個記憶體空間的字元
標頭檔案:#include
函式原型:int memcmp(const void *buf1, const void *buf2, size_t n);
其中:n為要比較的字元數
返回值:當buf1 > buf2時,返回 > 0;當buf1 = buf2時,返回 = 0;當buf1 < buf2時,返回 < 0。
C記憶體操作函式
1 c語言跟記憶體分配方式 1 從靜態儲存區域分配.內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在.例如全域性變數 static變數.2 在棧上建立 在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放.棧記憶體分配運算內置於處理器的指...
C 記憶體操作函式
void memcpy void dest void src,size t length 函式 函式從src的起始位置複製length個位元組到dest的記憶體起始位置,它並不關心資料型別,只是逐字節的進行複製。注意點 1 dest指標要分配足夠的空間,大於或等於 length個位元組的空間。如果沒...
c語言記憶體操作函式
一 malloc calloc 名稱 malloc calloc 功能 動態記憶體分配函式 標頭檔案 include h 函式原形 void malloc size t size void calloc size t num,size t size 引數 size 分配記憶體塊的大小 num分配記憶...