您的位置:首页 > 其它

内核中与驱动相关的内存操作之六(vmalloc)

2014-03-18 16:00 260 查看
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使用场合一样,只不过考虑到其效率问题,不建议使用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: