2012-02-16 9 views
4

mmap()を使用して特定のアドレスに近いバッファを割り当てることを計画しています。malloc()はmmap()を使って割り当てられた別のバッファと重なるバッファを割り当てることはできますか?

私が心配しているのは、mmap()を使って割り当てられたバッファは、malloc()またはnew演算子(C++)によって割り当てられた他のバッファと重なり合うことです。出来ますか?

答えて

1

いいえ、それは起こりません。

malloc機能によって維持ヒープは、カーネルが二回mmapを経由して同じブロックを与えた場合のメモリ領域のみを再利用できるので、brkまたはmmapを介して確立されている仮想マッピングに住んでいます。

+0

あなたが 'MAP_FIXED' ... –

+0

@Rを使用している場合、この回答は間違っています。 –

1

マッピングされたメモリをmallocで割り当てる必要があります。 mallocedメモリは重複しません。そうではありません、あなたは大丈夫でしょう。

6

あなたはははい、それは可能であるが、特定のアドレスにマッピングを作成mmapを要求するMAP_FIXEDを使用する場合には、そのようななどmallocによって割り当てられたスペース、共有ライブラリのコードまたはデータセクションの一部として、既存のマッピングを上書きMAP_FIXEDを指定せずにmmapを呼び出してアドレス範囲を取得していない限り、基本的にはMAP_FIXEDを使用するとエラーになります。この場合、MAP_FIXEDを使用してマッピングの一部を意図的に上書きすることができます)。

その他の回答は、あなたが「特定の住所に近い」と言ったという事実を忘れていたようで、私にとってはMAP_FIXEDを意味しています。 MAP_FIXEDを使用していない場合は、「特定の住所に近い」マッピングをどのように取得しているかを詳しく説明してください。

関連する問題