1 . kmalloc 核心函式
kmalloc分配一塊物理空間和虛擬空間都連續,大小為size的記憶體。#include
void *kmalloc(size_t size, int flags);//最大為 128k
void kfree(void *ptr);
常用的flags標誌有:
gfp_atomic
用來從中斷處理和程序上下文之外的其他**中分配記憶體. 從不睡眠.
gfp_kernel
核心記憶體的正常分配. 可能睡眠.最常用的,(內部最終呼叫 __get_free_pages)
gfp_user
用來為使用者空間頁來分配記憶體; 它可能睡眠.
例如: p=(int*)kmalloc(n*sizeof(int),gfp_kernel);//返回值是乙個指向記憶體開始的指標
2 . kzalloc 核心函式
用kzalloc申請記憶體的時候,效果相當於先是用 kmalloc()申請空間,然後用 memset(0) 來初始化。#include
void *kzalloc(size_t size, gfp_t flags);
void kfree(void *ptr);
引數參考kmalloc();
3 . vmalloc 核心函式
vmalloc 在虛擬記憶體空間分配一塊較大的連續記憶體區(虛擬記憶體空間連續,物理記憶體不一定連續)#include
void *vmalloc(unsigned
long size);
void vfree(void * addr);
函式可能引起睡眠,中斷中最好不採用該函式分配記憶體。
4 . __get_free_page 核心函式
申請一塊物理和虛擬記憶體都連續的記憶體。#include
__get_free_page(unsigned
long
int gfp_mask);//(內部呼叫 __get_free_pages)
5 . malloc 使用者空間函式
malloc是動態分配一塊連續的記憶體,malloc()的引數是乙個指定所需位元組數的整數,#include
void *malloc(size_t size);//單位 bytes
void
free(void *ptr);
記憶體沒有被初始化。
例如:p=(int*)malloc(n*sizeof(int));//返回值是乙個指向記憶體開始的指標
6 . calloc 使用者空間函式
calloc和malloc使用相似,主要的區別是分配記憶體初始化預設值為0。#include
void *calloc(size_t nmemb, size_t size);//單位 bytes
void
free(void *ptr);
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...