Objective c mmap&x27;ed数据与对象分配一起工作?

Objective c mmap&x27;ed数据与对象分配一起工作?,objective-c,cocoa,memory-management,mmap,virtual-memory,Objective C,Cocoa,Memory Management,Mmap,Virtual Memory,对于mmap()如何与iOS或OSX上的框架配合使用,我有点困惑 如果使用mmap()将文件映射到虚拟内存,并从中请求数据,则会将数据中的内核页映射到RAM。这实际上如何影响创建对象的方式 如果通常使用alloc/init创建对象,则分配内存块并启动对象。但是,如果数据驻留在虚拟内存中,即mmap文件中,该怎么办?是否需要对对象调用alloc?为对象分配的内存是否被虚拟内存中的数据填满?还是跳过alloc调用,只传入指向虚拟内存中数据的指针 e、 g.图像或声音文件,如果我知道文件在虚拟内存中的

对于
mmap()
如何与iOS或OSX上的框架配合使用,我有点困惑

如果使用
mmap()
将文件映射到虚拟内存,并从中请求数据,则会将数据中的内核页映射到RAM。这实际上如何影响创建对象的方式

如果通常使用
alloc
/
init
创建对象,则分配内存块并启动对象。但是,如果数据驻留在虚拟内存中,即
mmap
文件中,该怎么办?是否需要对对象调用
alloc
?为对象分配的内存是否被虚拟内存中的数据填满?还是跳过
alloc
调用,只传入指向虚拟内存中数据的指针

e、 g.图像或声音文件,如果我知道文件在虚拟内存中的位置,我将如何设置对象

如果一个人分配数据,如果数据已经被分页到RAM中,它不会被复制吗


我认为使用虚拟地址中的内存可以消除在堆上分配的需要。

如果在mmaped空间中只存储一个对象,那么只需跳过alloc,直接使用该位置即可。但是,通常情况下,您将拥有多个对象,现在您需要自己管理它。通常,至少有一部分将以固定的方式进行布局,以便两个流程都知道在何处查找内容。使用从竞技场开始的偏移量,而不是指针,因为这在两个进程的地址空间中都有效

本质上,你得到了一块内存,就好像你做了一个大的malloc/alloc,你就可以在里面玩了

如果有,就说

void *p = mmap( <appropriate arguments> );

现在你可以用所有正常的方法操作f,前提是f不包含任何指向mmapped空间的指针。通常,用偏移量代替这样的指针是一个很好的原则,然后当您需要使用偏移量时,可以将其转换为指针(通过添加p)。

是的,将使用偏移量,我只是想确认如果已知偏移量并且正确的数据被视为对象,是否可以跳过alloc。e、 g UIImage,对已确认的已知数据调用init。一旦知道偏移量,就可以将指向该位置的指针转换为指向对象类型的指针,然后就可以开始运行了。好的,谢谢。那么如何访问vm数据呢?是否传递已知数据的偏移量和大小?以UIImage为例,如果已知偏移量500是一个图像,并且它具有一定的大小,我们如何告诉系统仅获取一定数量的数据并将其作为图像进行处理?我详细阐述了我的答案。希望有帮助。如果它是一个图像,或者可能有不同大小的东西,那么你需要避免像定期分配一样在末尾徘徊。关于在iOS中使用mmap。。。因此,如果有多个mmap对象,则必须使用偏移量,但是每个类是否可以有一个单独的mmap对象,或者它们是否都引用相同的虚拟内存地址空间?
foo *f = (foo *)p+200;