記憶體分配及釋放相關函式:
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,增加的大小通...