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