kmalloc的对齐(Kmalloc Alignment)

2019-09-26 14:09发布

可以说,我的kmalloc与分配uint64_t中的阵列(和让我们假设该阵列的大小是32KB)。 我有以下问题:

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

当我分配的数组,我使用virt_to_phys得到阵列的物理地址,我很喜欢00000040142d5c00和gettign物理地址一样fffffe07df400000虚拟地址

是否有任何机会,我将结束与定位比uint64_t中较小的,可以说,4字节对齐与否?

先感谢您

Answer 1:

通过预处理器常量限定的对准ARCH_KMALLOC_MINALIGN

有人calculeted是这样的:

#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。



文章来源: Kmalloc Alignment