常見記憶體分配函式

2021-07-22 06:21:38 字數 1696 閱讀 3232

1 . kmalloc 核心函式

#include 

void *kmalloc(size_t size, int flags);//最大為 128k

void kfree(void *ptr);

kmalloc分配一塊物理空間和虛擬空間都連續,大小為size的記憶體。

常用的flags標誌有:

gfp_atomic

用來從中斷處理和程序上下文之外的其他**中分配記憶體. 從不睡眠.

gfp_kernel

核心記憶體的正常分配. 可能睡眠.最常用的,(內部最終呼叫 __get_free_pages)

gfp_user

用來為使用者空間頁來分配記憶體; 它可能睡眠.

例如: p=(int*)kmalloc(n*sizeof(int),gfp_kernel);//返回值是乙個指向記憶體開始的指標

2 . kzalloc 核心函式

#include 

void *kzalloc(size_t size, gfp_t flags);

void kfree(void *ptr);

用kzalloc申請記憶體的時候,效果相當於先是用 kmalloc()申請空間,然後用 memset(0) 來初始化。

引數參考kmalloc();

3 . vmalloc 核心函式

#include 

void *vmalloc(unsigned

long size);

void vfree(void * addr);

vmalloc 在虛擬記憶體空間分配一塊較大的連續記憶體區(虛擬記憶體空間連續,物理記憶體不一定連續)

函式可能引起睡眠,中斷中最好不採用該函式分配記憶體。

4 . __get_free_page 核心函式

#include 

__get_free_page(unsigned

long

int gfp_mask);//(內部呼叫 __get_free_pages)

申請一塊物理和虛擬記憶體都連續的記憶體。

5 . malloc 使用者空間函式

#include 

void *malloc(size_t size);//單位 bytes

void

free(void *ptr);

malloc是動態分配一塊連續的記憶體,malloc()的引數是乙個指定所需位元組數的整數,

記憶體沒有被初始化。

例如:p=(int*)malloc(n*sizeof(int));//返回值是乙個指向記憶體開始的指標

6 . calloc 使用者空間函式

#include 

void *calloc(size_t nmemb, size_t size);//單位 bytes

void

free(void *ptr);

calloc和malloc使用相似,主要的區別是分配記憶體初始化預設值為0。

colloc需要兩個引數,第乙個是需要分配記憶體的變數的個數,第二個是每個變數的大小.

例如:p=(int*)calloc(n,sizeof(int));

//返回值是乙個陣列指標,p[1]~p[n],每乙個指標指向小塊記憶體的首位址

常見動態分配記憶體分配函式

1.malloc函式的使用方法 void malloc unsigned size 其中size是指的分配記憶體的位元組 void malloc unsigned size 包含在庫函式 stdlib.h 中,作用是在記憶體的堆區分配乙個大小為size的連續空間,如果分配記憶體成功,函式返回新分配記...

常見的記憶體分配

動態記憶體分配函式的標頭檔案 1.malloc 函式的使用方法 malloc 函式的返回值是新申請的記憶體空間的首位址,如果申請失敗,返回的是 null 格式如下 void malloc 位元組數 2.calloc 函式的使用方法 calloc 函式的格式 calloc n,size 表示在堆區中申...

記憶體分配函式

2.c中提供堆區供給開發者分配記憶體空間,動態記憶體分配函式malloc,calloc,realloc 1 malloc函式的使用,原型為void malloc int length 引數為分配記憶體空間的大小 將記憶體分配4個位元組給乙個int型指標 返回值為任何指標 考慮到不同平台,可以使用si...