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



我正在尝试将文件映射到OS X的虚拟内存管理器中。如何使用目标C?

在Mac OS X上执行此操作。

使用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);

使用 mmap()的作品。鉴于您使用的可可A是使用NSDataNSMutableData。您可以在选项中使用NSDataReadingMappedIfSafeNSDataReadingMappedAlways使用-initWithContentsOfURL:options:error:创建数据对象。有两种不同的选项,因为映射文件不一定是安全的。如果文件位于可能自发消失的文件系统上(网络文件系统,可移动驱动器),则将其映射给您的应用程序崩溃。以前的选项仅在不太可能发生时地图。否则,它将数据读为内存。后一个选项总是映射的,使其留给您应对坠机的可能性。

最新更新