//釋放頁面塊,釋放的頁面塊從 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...