5

メモリを malloc すると、仮想メモリのみが利用可能になり、実際にはゼロページを指していました。malloced メモリに書き込もうとすると、実際の物理メモリが割り当てられます。この時点で、ゼロ ページからページ フォールトによってマッピングされた物理メモリにゼロをコピーするコピー オン ライトが発生します。私の問題は、ゼロ フィル オン デマンドが Linux ソース コードでどのように/どこで実装されているかです。この機能を無効にしてテストを行いたいと考えています。brk() や mmap() ではなく、ページ違反手順で発生した可能性があると思います。

ゼロ フィル オン デマンドに関連する同様のトピック。ZFODCOW

4

2 に答える 2

0

ユーザー空間プロセスが *alloc 呼び出しごとに実メモリを割り当てたい場合は、次のオプションを考えます。

  • パフォーマンス上の理由である場合は、すべての calloc 呼び出しを malloc+memset に置き換えて、プロセスが常に実メモリ ページを持つようにすることができます。ただし、カーネルはまだ一部のメモリ ページをマージできる可能性があります。

  • すべての malloc がその時点でページを返すように、メモリのオーバーコミットを無効にします。このようにして、プログラムは利用可能なメモリ (RAM + スワップ) よりも多くのメモリを割り当てることができなくなります。https://www.kernel.org/doc/Documentation/vm/overcommit-accountingを参照してください

于 2017-07-07T13:57:32.120 に答える