一些記憶體管理API

2021-08-20 09:33:15 字數 1332 閱讀 2576

//釋放頁面塊,釋放的頁面塊從 page 開始,個數等於2的order次方個

void __free_pages(struct page *page, unsigned int order)

}//以 gfp_mask 分配方式,分配2的order次方個連續的物理頁

unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)

//查詢一塊從 start 開始,到 end 結束的線性位址,並從該位址區間

//中,建立size位元組大小的虛擬核心

//區間

struct vm_struct *__get_vm_area(unsigned long size , unsigned long flags,

unsigned long start, unsigned long end    )

//基於slab分配實際上存在的連續的記憶體

//size 要分配的位元組數,flags 分配標誌 gfp_kernel最常見的分配方式

static __always_inline void *kmalloc(size_t size, gfp_t flags)

#endif

}return __kmalloc(size, flags);

}//objp 通常是kmalloc的返回值,指向分配位址的起始

void kfree(const void *objp)

//得到通過kmalloc分配的實際記憶體的大小

size_t ksize(const void *objp)

//為字串s分配一段記憶體空間,然後將字串s拷貝到所分配的位址空

//間中

char *kstrdup(const char *s, gfp_t gfp)

//為字串s分配一段記憶體空間,然後將字串s拷貝到所分配的位址空

//間中,最多max個位元組

char *kstrndup(const char *s, size_t max, gfp_t gfp)

return buf;

}//同kmalloc,申請記憶體,但是初始化為0,歸功於__gfp_zero

static inline void *kzalloc(size_t size, gfp_t flags)

//vmalloc分配一塊非連續位址空間,虛擬位址連續,但是實體地址一般不連續,使用者空間不可見

//vfree釋放記憶體

void vfree(const void *addr)

else

__vunmap(addr, 1);

}void *vmalloc(unsigned long size)

記憶體管理中一些演算法

在記憶體管理中存在這兩類演算法 一類是記憶體分配演算法,一類是頁面置換演算法 常見記憶體分配演算法及優缺點如下 1 首次適應演算法。使用該演算法進行記憶體分配時,從空閒分割槽鏈首開始查詢,直至找到乙個能滿足其大小要求的空閒分割槽為止。然後再按照作業的大小,從該分割槽中劃出一塊記憶體分配給請求者,餘下...

變數以及一些記憶體的管理

c語言筆記1 為什麼嵌入式需要學習c 因為作業系統的核心大多數都是用c寫的 而且c語言的三大特點 移植性好 就是在不同的平台上進行移植,需要修改的 小 訪問硬體 能夠直接的訪問硬體,雖然彙編也能訪問硬體,但是它是低階語言,但是c 語言設計高階語言的低階語言,一些複雜的操作彙編完成起來比較的複雜。執行...

記憶體管理API

作業系統中庫里的函式是通過呼叫下層函式來實現的 函式 呼叫的庫 呼叫的下層函式 自動分配 釋放記憶體auto ptr stl 呼叫了標準c 構造 析構 new delete c 呼叫了標準c malloc free 標準c 呼叫了posix brk sbrk posix 呼叫了linux系統介面 m...