use*_*840 6 c cpu memory-management alignment
我意识到大多数CPU更擅长在对齐的内存地址读取数据,即内存地址是CPU字的倍数.但是,在很多地方我都读过有关分配页面对齐内存的内容.为什么有人想要获得页面对齐的内存地址?它只是为了更大的表现吗?
小智 5
分配内存的“传统”方法是将其放在连续的地址空间中(“堆”,通过调用向上增长sbrk())。每次遇到页面边界时,都会出现页面错误,并且会映射到新页面。此策略有两个后果:
因此,此策略仅适用于较小的内存块,在这些内存块中,您不想为每个分配“浪费”整个页面。
对于较大的块,最好使用mmap()直接将新页面映射到某处的方式,以便获得“页面对齐的内存”。使用此功能,您的分配不会与其他分配共享页面。一旦您不再需要内存,就可以将其还给操作系统。请注意,许多malloc()实现会根据所需分配的大小自动选择使用sbrk()还是进行mmap()分配。