kmalloc vmalloc malloc区别
来源:互联网 发布:淘宝7.0.2版本下载 编辑:程序博客网 时间:2024/05/20 21:19
http://blog.csdn.net/computer055maxi/article/details/5879056
kmalloc()和vmalloc()介绍
kmalloc()
用于申请较小的、连续的物理内存
1. 以字节为单位进行分配,在<linux/slab.h>中
2. void *kmalloc(size_t size, int flags) 分配的内存物理地址上连续,虚拟地址上自然连续
3. gfp_mask标志:什么时候使用哪种标志?如下:
———————————————————————————————-
情形 相应标志
———————————————————————————————-
进程上下文,可以睡眠 GFP_KERNEL
进程上下文,不可以睡眠 GFP_ATOMIC
中断处理程序 GFP_ATOMIC
软中断 GFP_ATOMIC
Tasklet GFP_ATOMIC
用于DMA的内存,可以睡眠 GFP_DMA | GFP_KERNEL
用于DMA的内存,不可以睡眠 GFP_DMA | GFP_ATOMIC
———————————————————————————————-
4. void kfree(const void *ptr)
释放由kmalloc()分配出来的内存块
vmalloc()
用于申请较大的内存空间,虚拟内存是连续的
1. 以字节为单位进行分配,在<linux/vmalloc.h>中
2. void *vmalloc(unsigned long size) 分配的内存虚拟地址上连续,物理地址不连续
3. 一般情况下,只有硬件设备才需要物理地址连续的内存,因为硬件设备往往存在于MMU之外,根本不了解虚拟地址;但为了性能上的考虑,内核中一般使用kmalloc(),而只有在需要获得大块内存时才使用vmalloc(),例如当模块被动态加载到内核当中时,就把模块装载到由vmalloc()分配的内存上。
4.void vfree(void *addr),这个函数可以睡眠,因此不能从中断上下文调用。
malloc(), vmalloc()和kmalloc()区别
[*]kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存
[*]kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西(这点是自己猜测的,不一定正确)
[*]kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大
[*]内存只有在要被DMA访问的时候才需要物理上连续
[*]vmalloc比kmalloc要慢
- kmalloc vmalloc malloc区别
- kmalloc vmalloc malloc区别
- kmalloc vmalloc malloc区别
- kmalloc vmalloc malloc区别
- kmalloc vmalloc malloc区别
- kmalloc,vmalloc,malloc区别
- kmalloc、vmalloc、malloc的区别
- malloc kmalloc vmalloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- kmalloc、vmalloc、malloc的区别
- C语言内存分配函数
- 第五代呼叫中心之SOA(五)
- 尝试翻译linus torvalds的文章
- GoolgeAppEngine Web开发之单元测试环境的搭建
- 如何让div中的文字超过宽度时隐藏超出的部分
- kmalloc vmalloc malloc区别
- linux下如何安装lighttpd及配置lighttpd
- POJ3169 Layout——差分约束系统+SPFA
- Ubuntu下安装、配置FTP服务
- HCI- First Things First
- Linux查看程序端口占用情况
- POJ1849 Two——贪心
- 注册自定义的异常处理函数
- UI Design Framework