【发布时间】:2013-11-19 18:57:54
【问题描述】:
有什么不同的功能:malloc() 和 kmalloc()?
它们的区别仅在于:
-
malloc()可以在用户空间和内核空间调用,它会分配一个物理碎片化的内存区域 - 但
kmalloc()只能在内核空间中调用,它分配物理上连续的内存块
还是别的什么?
kmalloc() 在虚拟或物理寻址中使用指针,kmalloc() 与 __ get_free_pages() 有何不同?
【问题讨论】:
-
我很确定您可以在内核代码中调用的
malloc()不是您在用户代码中调用的malloc(),它位于 C 标准库中,未链接到内核.显然,他们有相同的名字,但仅此而已...... -
您使用的是什么操作系统?我很想知道你在哪里读到关于内核空间中 malloc 的信息,假设你使用的是 linux 因为我从来没有读过内核空间中的 malloc 实现,我可以根据驱动程序的要求使用 kmalloc/vmalloc... . 此外,用户空间 (glibc) 中的 malloc 甚至不是原语,因为调用 dlmalloc() 调用 mmap() 或 brk().. 在您的帖子之后,我尝试在整个内核中进行 grep,我只能在“用户级实用程序”和“用户级驱动程序”
标签: c memory memory-management posix