页面对齐分配的目的是什么?

时间:2018-01-20 17:55:20

标签: c malloc

我正在看C代码似乎是在分配与页面大小对齐的内存:

_aligned_malloc( size, PAGESIZE )

其中PAGESIZE是一个设置为4096的变量。暂时忽略该页面大小的值可能与4096不同,我只想知道为什么要将内存分配与页面大小对齐。它提供了哪些性能优势?除了表演之外还有其他目的吗?

1 个答案:

答案 0 :(得分:4)

可能与pagingvirtual address space有关。页面大小与MMU相关,因此通常受硬件限制。

在某些操作系统上,某些函数或system calls需要(即需要)页面对齐的指针。例如,在Linux上,mmap(2)(特别是当您将其与MAP_FIXED一起使用时,它需要真正的页面对齐地址),mprotect(2)madvise(2)mlock(2)mremap(2),也与shm_overview(7)相关。

一些非常低级的IO操作可能更喜欢(例如运行得更快)页面对齐的缓冲区(可能是send(2),或者直接write(2)到某个块设备......)因为内核可能会避免一些阻止复制(例如做一些DMA)并且可以进行特殊情况页面对齐数据。