システムコールで行われ、構造体*のためにメモリを割り当てる必要がある練習を完了しようとしています。私のコードは次のとおりです。malloc()の代わりにmmap()を使用する
myStruct * entry = (myStruct *)mmap(0, SIZEOF(myStruct), PROT_READ|PROT_WRITE,
MAP_ANONYMOUS, -1, 0);
明確にするために、私はmalloc()
を使用することはできませんが、mmap()
を使用することができます。私はNetbeansのWindowsでこれに問題はなかったが、今はコンパイルしてUbuntuのコマンドラインから実行していますが、アクセスしようとするたびに「Segmentation Fault」が表示されています。
この方法でメモリを割り当てる有効な方法はmmap()
ですか?私が心配していたのは、最初にmmap()
コールごとに大きなメモリを割り当てようとしていたからです。今は実行できません。
また、私のmmapが返されたエラーは22 - 無効な引数です(質問を書く際にいくつかのトラブルシューティングを行ったため、エラーチェックは上記のコードに含まれていません)。アドレスが0で、カスタムSIZEOF()
関数は他のmmap引数でも機能しますが、MAP_ANONYMOUS
を使用しているため、fd
とoffset
のパラメータはそれぞれ-1と0でなければなりません。
PROT_READ|PROT_WRITE
セクションに何か問題がありますか?
'4096'や' 8192'や 'SIZEOF(myStruct)'の代わりに2の累乗を使うと、それはうまくいくのでしょうか? –
私はあなたの 'SIZEOF()'からのエラーだと思います。'MAP PRIVATE'を追加してください。 –
' SIZEOF() 'は正しくありません。実際のアイテムの綴りは' sizeof() 'I.Eです。すべて小文字です。 – user3629249