可以说,我的kmalloc与分配uint64_t中的阵列(和让我们假设该阵列的大小是32KB)。 我有以下问题:
1)是数组保证将页面对齐? 2)在阵列保证是高速缓存/块对齐? 3)是否有根本没有保证?
当我分配的数组,我使用virt_to_phys得到阵列的物理地址,我很喜欢00000040142d5c00和gettign物理地址一样fffffe07df400000虚拟地址
是否有任何机会,我将结束与定位比uint64_t中较小的,可以说,4字节对齐与否?
先感谢您
可以说,我的kmalloc与分配uint64_t中的阵列(和让我们假设该阵列的大小是32KB)。 我有以下问题:
1)是数组保证将页面对齐? 2)在阵列保证是高速缓存/块对齐? 3)是否有根本没有保证?
当我分配的数组,我使用virt_to_phys得到阵列的物理地址,我很喜欢00000040142d5c00和gettign物理地址一样fffffe07df400000虚拟地址
是否有任何机会,我将结束与定位比uint64_t中较小的,可以说,4字节对齐与否?
先感谢您
通过预处理器常量限定的对准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。