5

WindowsでMEM_RESERVEフラグを指定してVirtualAllocExを使用して連続したメモリブロックを予約するアプリケーションがあります。これにより、仮想メモリブロックが予約されますが、物理ページまたはページファイルチャンクでバックアップされません。したがって、割り当てられたメモリにアクセスすると、セグメンテーション違反が発生しますが、他の割り当てはこの仮想メモリブロックと交差しません。

Linuxでmmapを使用して同じことを行うにはどうすればよいですか?この質問の答えに気づきましたが、割り当てられたページに触れないと、1 GBの物理メモリがプロセスに割り当てられないことを本当に保証しますか?スラッシングの問題は必要ありません。

4

1 に答える 1

9

匿名メモリを。でマッピングすることで同じことができるはずだと思いますPROT_NONE。メモリにアクセスPROT_NONEするとセグメンテーション違反が発生しますが、メモリ領域は予約され、他の目的には使用されません。非常に大きなメモリチャンクを割り当てる場合はMAP_NORESERVE、デフォルトのオーバーコミットメカニズムが割り当てをチェックしないように追加します。

PROT_NONEスタックの最後の「ガード」ページに一般的に使用されます。

于 2013-03-07T01:46:53.477 に答える