mmap有多便携?

mon*_*ing 8 linux windows macos mmap

我一直在考虑使用mmap文件阅读,并想知道它是多么便携.我正在Linux平台上开发,但希望我的程序能够在Mac OS X和Windows上运行.

我可以假设mmap正在这些平台上工作吗?

Jon*_*ler 12

mmap()函数是POSIX调用.它适用于MacOS X(以及Linux,HP-UX,AIX和Solaris).

问题区域是Windows.我不确定_mmap()POSIX"兼容性"子系统中是否有呼叫.它可能会存在 - 但是会有一个带有前导下划线的名称,因为Microsoft有一个关于命名空间的替代视图,并考虑mmap()侵入用户名空间,即使您要求POSIX功能.您可以MapViewOfFile()在另一个SO问题中找到替代Windows界面的定义和有关性能的讨论(mmap()与阅读块相比).

如果您尝试在32位系统上映射大型文件,您可能会发现没有足够的连续空间来将整个文件分配到内存中,因此内存映射将失败.不要以为它会起作用; 如果失败,决定你的后备策略是什么.