美文网首页
malloc kmalloc vmlloc 的区别

malloc kmalloc vmlloc 的区别

作者: 郄郄郄 | 来源:发表于2018-04-24 16:27 被阅读0次

    对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。

    进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。

        区别如下:

    1、kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存

    2、kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,malloc和vmalloc保证的是在虚拟地址空间上的连续

    3、kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大

    4、vmalloc比kmalloc要慢。

    尽管在某些情况下才需要物理上连续的内存块,但是很多内核代码都用kmalloc来获得内存,而不是vmalloc。这主要是出于性能的考虑。vmalloc函数为了把物理内存上不连续的页转换为虚拟地址空间上连续的页,必须专门建立页表项。糟糕的是,通过vmalloc获得的页必须一个个地进行映射,因为它们物理上是不连续的,这就会导致比直接内存映射大得多的TLB抖动,vmalloc仅在不得已时才会用--典型的就是为了获得大块内存时。

    相关文章

      网友评论

          本文标题:malloc kmalloc vmlloc 的区别

          本文链接:https://www.haomeiwen.com/subject/jrmjlftx.html