kmalloc - 内存申请

原型: void *kmalloc(size_t size, int flags)
功能: 在设备驱动程序或者内核模块中动态开辟内存,不是用malloc,而是kmallocvmalloc,或者用get_free_pages直接申请页,释放内存用的是kfreevfreefree_pages

kmalloc函数返回的是虚拟地址(线性地址),kmalloc特殊之处在于它分配的内存是物理上连续的,这对于要进行DMA的设备十分重要,而用vmalloc分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于DMA。

关于kmallocvmallocmalloc的一些总结

  1. kmallocvmalloc分配的是内核的内存,malloc分配的是用户的内存。
  2. kmalloc保证分配的内存在==物理上是连续==的,kmalloc分配的内存是位于0xBFFFFFFF - 0xFFFFFFFF中,driver一般是用它来完成对DS的分配,更适合于类似设备驱动的程序来使用。
  3. vmalloc保证的是在==虚拟地址空间上==的连续,vmalloc则是位于物理地址非连续,虚地址连续区,起始位置由VMALLOL_START来决定,一般作为交换区、模块的分配。
  4. kmalloc能分配的大小有限,vmallocmalloc能分配的大小相对较大(因为vmalloc还可以处理交换空间)。
  5. 内存只有在要被DMA访问的时候才需要物理上连续,vmallockmalloc要慢.
  6. vmalloc使用的正确场合是分配一大块,连续的,只在软件中存在的,用于缓冲的内存区域。不能在微处理器之外使用。
  7. vmalloc中调用了kmalloc(GFP—KERNEL),因此也不能应用于原子上下文。
  8. kmallockfree管理内核段内分配的内存,这是真实地址已知的实际物理内存块。
  9. vmalloc对应于vfree,分配连续的虚拟内存,但是物理上不一定连续。
  10. kmalloc分配内存是基于slab,因此slab的一些特性包括着色、对齐等都具备,性能较好,==物理地址和逻辑地址都是连续的。==
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值