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使用场合一样,只不过考虑到其效率问题,不建议使用.