当前位置:嗨网首页>书籍在线阅读

14-mmap()的不足

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.3.5 mmap()的不足

使用mmap()时需要注意以下几点:

  • 由于映射区域的大小总是页大小的整数倍,因此,文件大小与页大小的整数倍之间有空间浪费。对于小文件,空间浪费会比较严重。例如,如果页大小是4KB,一个7字节的映射就会浪费4 089字节。
  • 存储映射区域必须在进程地址空间内。对于32位的地址空间,大量的大小不同的映射会导致生成大量的碎片,使得很难找到连续的大片空内存。当然,这个问题在64位地址空间就不是很明显。
  • 创建和维护映射以及相关的内核数据结构有一定的开销。不过,如上节所述,由于mmap()消除了读写时的不必要拷贝,这种开销几乎可以忽略,对于大文件和频繁访问的文件更是如此。

基于以上理由,处理大文件(浪费空间很小),或者在文件大小恰好被page大小整除(没有空间浪费)时,mmap()的优势就会非常显著。