Ale*_*lex 6 c memory posix memory-management
什么是不同的功能:malloc()和kmalloc()?它们的区别仅在于:
malloc()可以在用户空间和内核空间被调用,它分配一个物理上分散的存储区域kmalloc()只能在内核空间中调用,并且它会分配物理上连续的内存块或者是其他东西?
kmalloc()在虚拟或物理寻址中使用指针有什么kmalloc()不同__ get_free_pages()?
我回答第二个问题,假设您使用的是 Linux 操作系统。关于第一个,请看我的评论。
kmalloc用于get_free_page获取内存。收集页面的方式取决于第二个参数(GFP_ATOMIC GFP_KERNEL ...其中 GFP 表示 GET FREE PAGE)。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.
Run Code Online (Sandbox Code Playgroud)
除此之外get_free_page,kmalloc都非常相似。_get_free_pages不同于get_free_page因为它给出了指向可能有几个(物理上连续)页长的内存区域的第一个字节的指针。另外一个新功能又非常相似, get_free_page就是get_zeroed_page(unsigned int flags)它得到一个单一的页面一样get_free_page,但归零的记忆
| 归档时间: |
|
| 查看次数: |
7952 次 |
| 最近记录: |