如何将文件映射到OSX中的虚拟内存管理器?

时间:2015-05-04 14:23:06

标签: objective-c macos file virtual-machine

我正在尝试将文件映射到OS X的虚拟内存管理器中。如何使用Objective C在Mac OS X上执行此操作?

2 个答案:

答案 0 :(得分:1)

使用mmap。例如

FILE* f = fopen(...);

// Map the file into memory.

// Need the file size.
fseek(f, 0, SEEK_END); // seek to end of file
off_t fileSize = ftello(f); // get current file pointer
fseek(f, 0, SEEK_SET); // seek back to beginning of file
mappedSize = fileSize;

mappedAddress = mmap(0, _mappedSize, PROT_READ, MAP_PRIVATE, f->_file, 0);

... use mappedAddress as a pointer to your data

// Finally free up
munmap(_mappedAddress, _mappedSize);
fclose(f);

答案 1 :(得分:1)

当然,使用mmap()可以正常工作。鉴于您正在使用Cocoa,另一个选择是使用NSDataNSMutableData。您可以使用选项中的-initWithContentsOfURL:options:error:NSDataReadingMappedIfSafe NSDataReadingMappedAlways创建数据对象。有两种不同的选项,因为映射文件不一定安全。如果文件位于可能自动消失的文件系统上(网络文件系统,可移动驱动器),则将其映射会打开您的应用程序以进行崩溃。前一个选项仅在不太可能发生的情况下进行映射。否则,它将数据读入内存。后一个选项总是映射,留给你应对崩溃的可能性。