kmalloc vs vmalloc

在 Linux 内核中,kmalloc()vmalloc() 是两种不同的内存分配函数,它们用于在内核空间中分配内存,但它们有着不同的用途和特性。

  1. kmalloc():

    • kmalloc() 用于分配小块连续的物理内存。它在内核内存池中分配内存,这些内存块是物理连续的,适用于较小的内存分配。
    • 这种方式分配的内存适合于小型数据结构、缓冲区等,因为它们在物理上连续,访问速度较快。
    • kmalloc() 函数在分配时需要提供所需内存的大小和分配标志,比如 GFP_KERNEL(表示在内核上下文中进行分配,可能会导致睡眠)。
  2. vmalloc():

    • vmalloc() 用于分配大块的虚拟内存,而不要求物理内存的连续性。它通过分配一系列的物理页框并映射到连续的虚拟地址空间来实现。
    • vmalloc() 通常用于需要大量内存的场景,比如大型缓冲区、内存映射等。
    • 由于它不要求物理内存的连续性,因此它的分配速度可能比 kmalloc() 稍慢一些。
    • vmalloc() 也需要提供所需内存的大小,但不需要提供额外的分配标志。

因此,kmalloc()vmalloc() 的主要区别在于对内存连续性的要求以及适用场景。如果你需要分配小块且物理内存要求连续的内存,可以使用 kmalloc();如果你需要分配大块的虚拟内存,而不关心物理内存的连续性,则可以使用 vmalloc()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值