記憶體管理相關函式

2021-08-07 13:38:48 字數 2218 閱讀 6095

記憶體分配及釋放相關函式:

void *calloc(int num, int size);

在記憶體中動態地分配 num 個長度為 size 的連續空間,並將每乙個位元組(共num*size 個)都初始化為 0。

void *malloc(int num); 

在堆區分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完成後不會被初始化,它們的值是未知的。

void *realloc(void *address, int newsize); 

該函式重新分配記憶體,把記憶體擴充套件到 newsize。

void free(void *address); 

該函式釋放 address 所指向的記憶體塊,釋放的是動態分配的記憶體空間。

void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset );

mmap的作用是對映檔案描述符fd指定檔案的 [offset, offset + len]區域至呼叫程序的[addr, addr + len]的記憶體區域。

offset引數一般設為0,表示從檔案頭開始對映。

prot 指定共享記憶體訪問許可權。可由如下幾個值相或:prot_read(可讀) , prot_write (可寫), prot_exec (可執行), prot_none(不可訪問)。

flags由以下幾個常值指定:map_shared , map_private , map_fixed,其中,map_shared , map_private必

選其一,而map_fixed則不推薦使用。

int munmap(void *start,size_t length);

munmap()與mmap作用相反,用來取消[start, start + length] 所指的對映記憶體空間。當程序結束或利用exec相關函式來執行其他程式時,對映記憶體會自動解除,但關閉對應的檔案描述符時不會解除對映.

void *memset(void *s, int ch, size_t 

n);標頭檔案: memory.h 或者 string.h

將s所指向的長度為n個位元組的空間全部初始化為字元ch。一般用來將s空間初始化為'\0'。

記憶體控制相關函式,請參考:

void *memcpy(

void 

*dest, 

void 

*src, 

size_t

size);

將src指向的內容的size個位元組拷貝到dest所指向的空間,如果提前遇到空字元\0則結束拷貝。當src和dest空間重疊時, 可能會發生錯誤。

void *memmove(void *dest, const void *src, size_t size);

作用同memcpy。但是能保證dest和src區域重疊時候正確拷貝。memcpy是memmove的乙個子集。

char *strcpy(char *dest, char *src);

將src指向的字串拷貝到dest所指向的空間,直到遇到空字串\0. 空字串也會被拷貝到dest中。

如果src字串長度大於dest空間長度,可能會導致dest後面的空間被覆蓋,發生段錯誤。

char  *strncpy(char *dest, const char *src, size_t n);

將src字串的前n個位元組拷貝到dest所指向的空間。

extern void *memccpy(void *dest, void *src, unsigned char ch, unsigned int size);

由src所指記憶體區域複製不多於size個位元組到dest所指記憶體區域,如果遇到字元ch則停止複製。

返回指向字元ch後的第乙個字元的指標,如果src前n個位元組中不存在ch則返回null。ch被複製。

extern char *strdup(char *s);

不是標準的c函式,是將s指向的字串拷貝到乙個新的位置,內部要呼叫malloc為新位置分配記憶體。返回值是新位置的位址,如果失敗則返回null。這個函式一般與free()搭配使用,如果不需要新的位置指標,需要即使釋放,否則會造成記憶體洩露。

參考:

Linux系統記憶體管理及相關操作函式

堆記憶體的管理 程式設計師全權負責 malloc 和free c程式設計師分配和 記憶體的工具 malloc 在unix系統中一次對映33個記憶體頁,如果申請的記憶體比較大 達到32個記憶體頁 系統會對映出比使用者申請的記憶體稍大的記憶體頁數 犧牲空間換時間 int pi malloc 4 mall...

記憶體管理相關 記憶體布局 記憶體管理方案

ios系統下的記憶體布局 最上面是核心區,最下面是保留區,中間是給程式載入的空間。從高位址到低位址依次為核心區 棧 堆 靜態全域性區 未初始化區域.bss和已初始化區域.data 區 保留區 程式被載入到記憶體分成三段未初始化資料 bss 已初始化資料 data 和 段 text 段顧名思義存放 已...

記憶體管理函式

一 基本用法 include int brk void addr void sbrk intptr t increment 返回空間位址brk是系統呼叫,通過傳遞的addr來重新設定program break,成功返回0,否則返回 1。sbrk不是系統呼叫,是c庫函式,用來增加heap,增加的大小通...