3

メモリを大量に消費するプロセスをシミュレートする必要があります。たとえば、4.0 GiBのマシンでは、3.2 GiBを消費するプロセスが必要です(MiBを与えるか、または少し取ります)。

私はそれが次のように簡単であるべきだと思いました:

my $mbytes = 3276;
my $huge_string = 'X' x ($mbytes * 1024 * 1024);

しかし、私はプロセスが必要な2倍のメモリを消費することになります。

  • これは、2台のWindows 7 amd64マシンでも同じです。1台は64ビット、もう1台は32ビットビルドのStrawberryPerlです。

  • Sysinternals Process Explorerを使用していて、「PrivateBytes」を監視しています

もちろん、私は$mbytes /= 2(今のところ、おそらくそれを行うでしょう)、しかし:

  • もっと良い方法はありますか?

  • 量が文字列の長さの2倍である理由を誰かが説明できますか?

4

1 に答える 1

6

http://www.perlmonks.org/index.pl?node_id=948181から採用されたコード、すべてのクレジットはPerlmonkBrowserUkに送られます

my $huge_string = 'X';
$huge_string x= $mbytes * 1024 * 1024;

なぜ量が文字列の長さの2倍になるのですか?

評価の順番を考えてください。右辺の式は式にメモリを割り当てますx。また、新しいスカラーへの代入操作も同様です。Perlの場合と同様に、右側の式はもう参照されていませんが、メモリはすぐには解放されません。

上記のように、既存のスカラーを操作すると、2番目の割り当てが回避されます。

于 2012-04-03T15:32:51.977 に答える