Kmalloc 对齐

Kmalloc Alignment

假设我使用 kmalloc 分配了一个 uint64_t 的数组(假设数组的大小为 32kB)。我有以下问题:

1)数组是否保证页对齐? 2) 数组是否保证缓存/块对齐? 3)完全没有保证吗?

当我分配数组时,我使用 virt_to_phys 获取数组的物理地址,我得到了 00000040142d5c00 这样的物理地址和 fffffe07df400000 这样的虚拟地址

有没有可能我最终的对齐方式小于 uint64_t ,可以说是否是 4 字节对齐方式?

提前致谢

预处理器常量定义的对齐方式ARCH_KMALLOC_MINALIGN,

是这样计算的:

#if defined(ARCH_DMA_MINALIGN) && ARCH_DMA_MINALIGN > 8
#define ARCH_KMALLOC_MINALIGN ARCH_DMA_MINALIGN
#define KMALLOC_MIN_SIZE ARCH_DMA_MINALIGN
#define KMALLOC_SHIFT_LOW ilog2(ARCH_DMA_MINALIGN)
#else
#define ARCH_KMALLOC_MINALIGN __alignof__(unsigned long long)
#endif

所以理论上 __alignof__(unsigned long long) 可能 return 小于 8 在一些异国情调的情况下, 但实际上 __alignof__(unsigned long long) >= 8,所以 ARCH_KMALLOC_MINALIGN 会 >= 8.