明らかに私は通常走りません。
#include <stdlib.h>
int main() {
while (malloc(50));
return 0;
}
しかし、私は大規模なプロジェクトをコンパイルしようとしてきました。実行中は、コンピュータcmake
のリソースが使い果たされ、コンピュータが遅くなり、数分間使用できなくなります。その後、突然私のコンピュータが再び応答しましたcmake
。SIGKILL
解決策は、をcmake
実行してジョブ数を制限することでした-j2
。
しかし、上記の単純な「メモリ不足」プログラムを実行した後、最初に私のシステムが過負荷になったことを発見して驚きました。マニュアルページによると、malloc()
使用可能なメモリがない場合はmalloc
単に返されます0
。システムがメモリの問題を認識せず、malloc
失敗を選択するのはなぜですか?
つまり、プログラムがメモリを使い果たしてシステムが遅くなるようにシステムを構成する方法を探しています。同様に、常に私のDEの優先順位を指定するようにスケジューラを設定する方法はありますか?
私はKDEを使用してLinux 5.6.6.arch1-1 x86_64を実行しています。ありがとうございます。
ベストアンサー1
malloc() のマニュアルページによると、malloc は、使用可能なメモリがない場合は単に 0 を返します。
この場合、コードが終了するように指定されます。しかし、先取りされたようです。
Linuxには、悪意のあるプロセスを識別して終了し、プロセスが実行するアクションを記録するメモリ不足(OOM)キラーがあります。しかし、早期に実行しないようにします。
ポライトアプリケーションは、システムに設定を問い合わせ、それに応じて動作を調整することが知られています。明らかに、cmakeはそのうちの1つではありません。