2016-03-31 5 views
2

私は、ポータブルCまたはC++でメモリマップファイルを使用することが可能かどうかを疑問に思っていました。私は、私が知る限り、どの標準もメモリマップされたファイルの存在を認識していないからではないと思います。CまたはC++標準でメモリマップファイルの存在を認識していますか?

メモリマッピングを使用すると、2つのアドレスに同じバイトを持つことができます。また、最初にオブジェクトを構築せずにメモリを使用することもできないと思います(char*を除く)。したがって、既存のマップされたファイルを、未定義の動作であるべき整数の配列として扱う場合。

メモリマップされたファイルと標準に関する状況は何ですか?

+2

標準AFAIKでは_memory mapped files_についての考え方はありません。 –

+0

C++ 14標準の* memory mapped *を検索すると、0の結果が得られます。 – NathanOliver

+0

'malloc()'によって割り当てられたメモリは、どのような型の配列でも使用できます(割り当てが十分大きい場合)。C11ドラフト標準n1570、* 6.5式6有効型*を参照してください。 'mmap()'によって割り当てられたメモリで同じことをするべきではない理由はありません。 – EOF

答えて

5

これらはありません。メモリマッピングは、オペレーティングシステムによって一般的に提供されています.CおよびC++は、オペレーティングシステムなしでも実行できます。このような可用性を、言語がターゲットとするプラットフォームの範囲に課すことは、非常に限定的であろう。

メモリマップされたものではなく、フリースタンディング環境でもファイルがサポートされないことがあります。

3

ポータブルCまたはC++でメモリマップファイルを使用することが可能かどうかは不思議です。

はい、それは(C++で)で、私の知る限りでは標準的には、メモリマップされたファイルの存在を認識していないので、私はそうは思いませんhttp://www.boost.org/doc/libs/1_60_0/doc/html/interprocess/sharedmemorybetweenprocesses.html#interprocess.sharedmemorybetweenprocesses.mapped_file

boost.interprocessライブラリを参照してください。

いいえこれは標準ではありませんが、それはほとんどのポータブルですブーストライブラリにあります。

メモリマッピングを使用すると、2つのアドレスに同じバイトを持つことができます。また、最初にオブジェクトを構築せずにメモリを使用することもできないと思います(char *を除く)。したがって、既存のマップされたファイルを、未定義の動作であるべき整数の配列として扱う場合。

上記のドキュメントを参照してください。 C++オブジェクトは共有メモリに直接マップされていますが、マップされたメモリ領域の先頭から特殊な「オフセット」ポインタによってアドレス指定されています。

メモリマップされたファイルとその標準に関する状況は何ですか?

状況はありません。それらは標準的なメモリモデルの一部ではありません。

関連する問題