1. 程式人生 > >核心中與驅動相關的記憶體操作之六(vmalloc)

核心中與驅動相關的記憶體操作之六(vmalloc)

    vmalloc是在整個虛擬空間分配出一段記憶體,它所面向的處理物件是CPU整個虛擬記憶體空間,而kmalloc是CPU的邏輯地址空間.邏輯地址空間也是"虛擬"的,只不過它和實體地址空間保持著線性關係的一種"虛擬地址空間",可以說,邏輯地址是虛擬地址的一個子集.

1.原型:

void *vmalloc(unsigned long size)

2.引數說明:

size: 

    目標分配記憶體的大小.

3.返回值:

    成功返回分配記憶體的地址,失敗返回NULL.

4.應用場景:

    4-1.vmalloc面向的記憶體分配是整個虛擬空間的,即不一定是邏輯地址空間;

    4-2.vmalloc分配出來的記憶體空間在實體記憶體空間上不一定是連續的;

    4-3.vmalloc分配的記憶體空間投影到實體記憶體空間是非線性的;

    4-4.vmalloc分配記憶體後會引起核心對頁表的修改,這是因為它和實體記憶體空間是非線性的;

    4-5.開銷比較大,因為它有個頁表重新修改的過程;

    4-6.效率不高,因為它有個頁表重新修改的過程;

    4-7.基於上述兩點,不推薦使用vmalloc來分配記憶體;

    4-8.用vmalloc分配出來的記憶體需要用vfree來釋放. 

5.例項:

    和kmalloc使用場合一樣,只不過考慮到其效率問題,不建議使用.