iOSまたはOSXのフレームワークでmmap()
がどのように動作するか少し混乱します。mmap'edデータはオブジェクトの割り当てとどのように機能しますか?
ファイルがmmap()
を使用して仮想メモリにマップされ、それからデータが要求された場合、カーネルはデータをRAMにページングします。これは実際にオブジェクトを作成する方法に実際どのような影響を及ぼしますか?
通常、alloc
/init
を使用してオブジェクトを作成すると、メモリブロックが割り当てられ、オブジェクトが開始されます。しかし、データが仮想メモリにある場合、mmap
'ファイルではどうなりますか?オブジェクト上でalloc
を呼び出す必要がありますか?オブジェクトの割り当てられたメモリが仮想メモリのデータでいっぱいになりますか?または、alloc
呼び出しをスキップし、仮想メモリ内のデータへのポインタを渡すだけですか?
イメージまたはサウンドファイル、仮想メモリ内のファイルの場所を知っている場合、どのようにオブジェクトをセットアップするのですか?
データを割り当てる場合、データがすでにRAMにページングされていると重複しませんか?
仮想アドレスのメモリを使用すると、ヒープに割り当てる必要がなくなると考えていました。
オフセットが使用され、正しいデータがオブジェクトとして扱われた場合、allocをスキップできるかどうかを確認したかっただけです。例えば、UIImageは、mmap'edである既知のデータに対してinitを呼び出す – user773578
を確認しました。オフセットを知ったら、その場所へのポインタをオブジェクト型へのポインタにキャストして、オフにして実行することができます。 – DRVic
よろしくお願いします。では、どのようにVMデータにアクセスするのですか?既知のデータのオフセットとサイズを渡しますか? UIImageの例では、オフセット500がイメージであることがわかっていて、それが一定のサイズである場合、システムに一定量のデータを取り込んでイメージとして処理するように指示するにはどうすればよいですか? – user773578