私がそれをテストしたとき、私のコンピュータは私のプログラムに最も多くのメモリを提供するために最善を尽くしました..そして私のコンピュータはクラッシュしました..しかし、それが継続的にあまりにも多くのメモリを必要とする場合、ubuntuがこのプロセスを強制終了することを思い出しました..なぜそれがこれになるのですか?
/*I write the code to test how much memory can my computer provide the most*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m = 0 ;
while( malloc(1 << 20) )
{
printf ("%d MB\n", ++m) ;
}
return 0 ;
}
メモリは割り当てられておらず、予約されているだけなので、ページテーブルなどのシステムの他の部分はいっぱいになりますが、メモリ不足キラーが処理する物理メモリはいっぱいになりません。リークする前に、メモリブロックでmemset()を使用してみてください。
/ proc / sys / vm / overcommit_memoryについて調べることにも興味があるかもしれません
差出人:https://www.kernel.org/doc/Documentation/sysctl/vm.txt
overcommit_memory:
この値には、メモリのオーバーコミットを有効にするフラグが含まれています。
このフラグが0の場合、カーネルは、ユーザースペースがより多くのメモリを要求したときに残っている空きメモリの量を推定しようとします。
このフラグが1の場合、カーネルは実際になくなるまで常に十分なメモリがあるふりをします。
このフラグが2の場合、カーネルは「オーバーコミットしない」ポリシーを使用して、メモリのオーバーコミットを防止しようとします。user_reserve_kbytesがこのポリシーに影響することに注意してください。
この機能は、malloc()が「万が一に備えて」大量のメモリを使用し、その多くを使用しないプログラムが多数あるため、非常に便利です。
デフォルト値は0です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加