我正在看C代码似乎是在分配与页面大小对齐的内存:
_aligned_malloc( size, PAGESIZE )
其中PAGESIZE
是一个设置为4096的变量。暂时忽略该页面大小的值可能与4096不同,我只想知道为什么要将内存分配与页面大小对齐。它提供了哪些性能优势?除了表演之外还有其他目的吗?
答案 0 :(得分:4)
可能与paging和virtual 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)并且可以进行特殊情况页面对齐数据。