1

VMWare で実行されている Ubuntu 12.10 (カーネル 3.9.0-rc2) のインストールがあります。私はそれに512MBのRAMを与えました。
cat /proc/meminfo ショー:
MemTotal: 507864 KB
MemFree: 440180

(何らかの理由で) スワップを使用したいので、(malloc() を使用して) 500MB の配列を割り当て、ジャンクで埋める C プログラムを作成しました。ただし、プログラムは配列全体を埋める前に強制終了され、「強制終了」というメッセージが画面に表示されます。

これが正常な動作であるかどうか、またその理由は何ですか? 私の意見では、空き RAM が不足しているため、スワップを使用する必要があります。

編集:1GBのスワップがあるとは言いませんでした。cat /proc/swaps の表示:
/dev/sda5 Size: 1046524 Used: 14672.
メモリを消費するプログラムを実行すると、「使用済み」の量が増加します。しかし、ご覧のとおり、多くのスワップが残っています。では、なぜプログラムを「強制終了」する必要があったのでしょうか?

4

2 に答える 2

1

そのため、有効な答えを見つけることができませんでした。一時的な解決策があります:

仮想マシンの設定を変更して、VM に 512MB の RAM を割り当てました。今度は 2GB に戻し、それぞれ 500MB を消費する 5 つの並列プログラムを実行しました。ありがたいことに、それらはすべて実行され、スワップが使用されます。

スワップ管理のプロジェクトにスワップを使用する必要がありました。

于 2013-03-27T19:03:14.123 に答える
0

また、メモリを割り当てるために C プログラムをどのように作成したか、およびコンパイラ フラグは何かも重要です。たとえば、メモリを静的に割り当てる場合 (double A[N][N] など)、動作は動的に割り当てる場合 (malloc/calloc の使用など) とは異なります。静的割り当ては、コンパイラのメモリ モデルによって制限されます (medium、small などを指定できることがよくあります)。おそらく、良い出発点は次のとおりです。

http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

これは役に立ちますか?

于 2013-03-28T01:17:57.423 に答える