3

プログラム:

1つ以上のスレッドで実行できる大量のデータ用のC++計算プログラムを作成しました。(設定ファイル経由)

プログラム環境は次のとおりです:C ++、OpenMp、Redhat-x64、malloc / free

Linuxでの結果:

  • 1スレッドで実行すると、プロセスサイズは177MBになります。
  • 2つのスレッドで実行すると、プロセスサイズは317MBになります。
  • 4スレッドで実行すると、プロセスサイズは600MBになります。

Windowsでの結果:

  • 使用するスレッドの数に関係なく、プロセスサイズは同じ110MBです。

質問:

Linuxでより多くのスレッドを使用すると、メモリ消費量が増えるのはなぜですか?

4

3 に答える 3

7

Linuxでは、Windowsの場合と同様に、delete解放されたメモリを将来のnew要求のためにキャッシュしますが、Linuxにはスレッドごとのキャッシュがあり、Windowsにはプロセスごとのキャッシュがあります。

(より正確には、そのようなキャッシュがどのように機能するかを決定するのはC ++ランタイムライブラリです)。

于 2012-08-10T13:59:13.960 に答える
1

ページがどこに行くかを理解するために/proc/<PID>/maps、またはそれ以上を使用してください。pmap(1)

于 2012-08-10T13:55:53.823 に答える
1

開始するすべてのスレッドには、それを実行するために割り当てられたスタックと、スレッドローカル変数用のメモリが必要です。スレッドあたり150Mbが適切に見えるかどうかは完全にはわかりませんが、スレッドローカル配列がそのような原因になる可能性があります。

于 2012-08-10T14:42:53.190 に答える