1

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

1) 数组是否保证页面对齐?2) 阵列是否保证缓存/块对齐?3)根本没有保证吗?

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

有没有可能我最终的对齐小于 uint64_t ,比如说 4 字节对齐与否?

先感谢您

4

1 回答 1

1

由预处理器常量定义的对齐方式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)可能会在某些特殊情况下返回小于 8 的值,但实际上 __alignof__(unsigned long long)>= 8,因此 ARCH_KMALLOC_MINALIGN 将 >= 8。

于 2017-05-30T07:50:39.070 回答