有什么不同的功能:malloc()kmalloc()
它们的不同之处仅在于:

  • 可以在用户空间和内核空间中调用malloc(),它分配物理上分散的内存区域
  • kmalloc()只能在内核空间中调用,它分配物理上连续的内存块

  • 或者是其他东西?
    kmalloc()在虚拟或物理寻址中使用指针,什么kmalloc()__ get_free_pages()不同?

    最佳答案

    假设您使用的是Linux OS,我将回答第二个问题。关于第一个,请看一下我的评论。
    kmalloc使用get_free_page获取内存。收集页面的方式取决于第二个参数(GFP_ATOMIC GFP_KERNEL ...,其中GFP表示获取免费页面)。 kmalloc在GFP上的优点是它可以将多个分配放入单个页面中。

    kmalloc的一些选项是:

    GFP_USER - Allocate memory on behalf of user. May sleep.
    GFP_KERNEL - Allocate normal kernel ram. May sleep.
    GFP_ATOMIC - Allocation will not sleep. May use emergency pools. For example, use this inside interrupt handlers.
    GFP_HIGHUSER - Allocate pages from high memory.
    GFP_NOIO - Do not do any I/O at all while trying to get memory.
    GFP_NOFS - Do not make any fs calls while trying to get memory.
    GFP_NOWAIT - Allocation will not sleep.
    GFP_THISNODE - Allocate node-local memory only.
    GFP_DMA - Allocation suitable for DMA. Should only be used for kmalloc caches. Otherwise, use a slab created with SLAB_DMA.
    

    除此之外,get_free_pagekmalloc非常相似。 _get_free_pagesget_free_page有所不同,因为它为存储区的第一个字节提供了指针,该存储区的长度可能为几个(物理上连续的)页长。
    另一个与get_free_page非常相似的功能是get_zeroed_page(unsigned int flags),它获得像get_free_page这样的单个页面,但将内存清零

    10-08 13:44