メモリを malloc すると、仮想メモリのみが利用可能になり、実際にはゼロページを指していました。malloced メモリに書き込もうとすると、実際の物理メモリが割り当てられます。この時点で、ゼロ ページからページ フォールトによってマッピングされた物理メモリにゼロをコピーするコピー オン ライトが発生します。私の問題は、ゼロ フィル オン デマンドが Linux ソース コードでどのように/どこで実装されているかです。この機能を無効にしてテストを行いたいと考えています。brk() や mmap() ではなく、ページ違反手順で発生した可能性があると思います。
2587 次
2 に答える
0
ユーザー空間プロセスが *alloc 呼び出しごとに実メモリを割り当てたい場合は、次のオプションを考えます。
パフォーマンス上の理由である場合は、すべての calloc 呼び出しを malloc+memset に置き換えて、プロセスが常に実メモリ ページを持つようにすることができます。ただし、カーネルはまだ一部のメモリ ページをマージできる可能性があります。
すべての malloc がその時点でページを返すように、メモリのオーバーコミットを無効にします。このようにして、プログラムは利用可能なメモリ (RAM + スワップ) よりも多くのメモリを割り当てることができなくなります。https://www.kernel.org/doc/Documentation/vm/overcommit-accountingを参照してください
于 2017-07-07T13:57:32.120 に答える