vmalloc

計算機語言的一種函式名,原型為:void *vmalloc(unsigned long size)。

計算機語言的一種函式名,原型為:void *vmalloc(unsigned long size)。 size要分配記憶體的大小. 以位元組為單位。在設備驅動程式或者核心模組中動態開闢記憶體,不是用malloc,而是kmalloc ,vmalloc,或者用get_free_pages直接申請頁。釋放記憶體用的是kfree,vfree,或free_pages. kmalloc函式返回的是虛擬地址(線性地址). kmalloc特殊之處在於它分配的記憶體是物理上連續的,這對於要進行DMA的設備十分重要. 而用vmalloc分配的記憶體只是線性地址連續,物理地址不一定連續,不能直接用於DMA。

vmalloc函式的工作方式類似於kmalloc,只不過前者分配的記憶體虛擬地址是連續的,而物理地址則無需連續。它通過分配非連續的物理記憶體塊,再修改頁表,把記憶體映射到邏輯地址空間的連續區域中。通過vmalloc獲得的頁必須一個一個地進行映射,效率不高,因此,只在不得已(一般是為了獲得大塊記憶體)時使用。vmalloc函式返回一個指針,指向邏輯上連續的一塊記憶體區,其大小至少為size。在發生錯誤時,函式返回NULL。vmalloc可能睡眠,因此,不能從中斷上下文中進行調用,也不能從其它不允許阻塞的情況下調用。要釋放通過vmalloc所獲得的記憶體,應使用vfree函式。

相關詞條

熱門詞條

聯絡我們