2

mmap(2)アドレスヒントを提供せずに を使用していくつかのページを割り当て、後でmalloc(3)/を使用してメモリを割り当てると、以前の呼び出しによって返されたアドレスにオーバーラップするか、常に保証される方法でヒープを呼び出して成長calloc(3)させる可能性がありますか?ヒープまたはスタックから遠く離れたアドレスを返すには?mallocsbrk(2)mmapmmap

4

2 に答える 2

2

いいえ、衝突のリスクはありません。Linux ではなく、ページングを使用する実装ではありません。また、ページングのmmap()ないシステム上にあるとは思えません。どの仮想アドレスが使用されているかはわかりません (わからないため) mmap()。おそらく、実際にはヒープから十分離れています。物理メモリの場合:sbrk()遅かれ早かれページ フォールトが発生し、もちろん、OS は使用されていないページをマップするようにします。mmap()とにかくページ全体で動作します...

Rodrigoが正しく指摘しているmalloc()ように編集しますmmap()。したがって、 を使用して処理される小さなリクエストについては、ページフォールトが多すぎるsbrk()と予想する必要はありません。

于 2015-08-06T17:47:01.247 に答える
1

いいえ、重複はありません。

それは彼らが遠く離れているという意味ではなく、隣り合っているかもしれません。ただし、割り当てられたメモリの制限を尊重すれば、すべて問題ありません。

の glib 実装では、メモリの大きなチャンクに対する要求を満たすためにmalloc()匿名呼び出しが使用されることに注意してください。mmap()

于 2015-08-06T17:45:15.483 に答える