从this post我意识到:
kmalloc可以处理的最小分配为32或64字节之大
和
您获得的实际内存取决于系统的体系结构
但是这里和其他站点也提到了内存页面大小。我不知道页面大小与最小的kmalloc()
分配有何关系?页面大小通常为4096字节,但最小分配为32或64字节(取决于arch)。
那么最小的kmalloc()
分配和页面大小之间是什么关系?为什么最小的分配是32或64字节而不是16(例如)?
那么最小的kmalloc()
分配和页面大小之间是什么关系?
无。它们是无关的。
您可以从the source code中看到:
#ifdef CONFIG_SLAB
// ...
#define KMALLOC_SHIFT_LOW 5
#endif
#ifdef CONFIG_SLUB
// ...
#define KMALLOC_SHIFT_LOW 3
#endif
#ifdef CONFIG_SLOB
// ...
#define KMALLOC_SHIFT_LOW 3
#endif
// ...
#define KMALLOC_MIN_SIZE (1 << KMALLOC_SHIFT_LOW)
最终没有为不同的分配器定义KMALLOC_MIN_SIZE
的宏取决于页面大小,因此页面大小与kmalloc()
最小分配大小之间没有关系。