假设一个进程要求mmap
只有50个字节的内存。是否会为此流程分配整个页面?剩下的只是浪费了吗?另外,如何在内核分配函数中处理这个问题,如kmalloc
?
答案 0 :(得分:0)
来自man 3p mmap
:
实施在整页上执行映射操作。因此,虽然参数
len
不需要满足大小或对齐约束,但实现应在任何映射操作中包括由范围[pa,pa+len)
指定的任何部分页面。 / p>
所以,实际上,当你mmap
50个字节时,你实际上会映射整个页面。
关于内核情况,有一个页面分配器(get_free_pages()/alloc_pages()
或类似的东西),但它们是低级函数,主要用于内存管理代码。
普通的kmalloc()
函数有点类似于用户空间malloc()
:它将在内部分配整个页面,然后将它们分成较小的部分以供调用者使用。