我正在查看似乎正在分配与页面大小对齐的内存的 C 代码:
_aligned_malloc( size, PAGESIZE )
其中PAGESIZE
是设置为 4096 的变量。目前忽略页面大小的值可能与 4096 不同,我只想知道为什么要将内存分配与页面大小对齐。它提供了哪些性能优势(如果有(?除了性能之外,它还有其他目的吗?
它可能与分页和虚拟地址空间有关。页面大小与 MMU 相关,因此通常受硬件约束。
在某些操作系统上,某些函数或系统调用需要(即需要(页面对齐的指针。例如,在 Linux 上,mmap(2((特别是当你将它与 MAP_FIXED
一起使用时,它需要一个真正的页面对齐地址(,mprotect(2(,madvise(2(,mlock(2(,mremap(2(,也相关的shm_overview(7(。
一些非常低级的 IO 操作可能更喜欢(例如运行得更快(使用页面对齐的缓冲区(可能是 send(2(,或者直接写入(2( 到某个块设备......(,因为内核可能会避免一些块复制(例如做一些 DMA(,并且可以在特殊情况下使用页面对齐的数据。