使用perl脚本故意吃一定量的内存

Alo*_*dal 3 windows perl strawberry-perl

我需要模拟一个需要内存的过程.例如,在具有4.0 GiB的计算机上,我需要一个吃3.2 GiB(给予或少量MiB)的进程.

我认为它应该像以下一样简单:

my $mbytes = 3276;
my $huge_string = 'X' x ($mbytes * 1024 * 1024);
Run Code Online (Sandbox Code Playgroud)

但最终我的进程吃了两倍于我需要的内存.

  • 这在两台Windows 7 amd64机器上是相同的:一台是64位,另一台是32位版本的Strawberry Perl

  • 我正在使用Sysinternals Process Explorer并观看"Private Bytes"

当然,我可以$mbytes /= 2(现在,我可能会这样做),但是:

  • 有没有更好的办法?

  • 任何人都可以解释为什么数量是字符串长度的两倍?

dax*_*xim 6

代码改编自http://www.perlmonks.org/index.pl?node_id=948181,所有功劳都归功于Perlmonk BrowserUk.

my $huge_string = 'X';
$huge_string x= $mbytes * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)

为什么金额是字符串长度的两倍?

想想评估的顺序.右手表达式为表达式分配内存,对x新标量的赋值操作也是如此.像往常一样,即使右手表达式不再被引用,内存也不会立即被释放.

如上所示,对现有标量进行操作可避免第二次分配.