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

时间:2012-04-03 10:02:17

标签: windows perl strawberry-perl

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

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

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

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

  • 在两台Windows 7 amd64机器上也是如此:一台是64位,另一台是64位 使用32位版本的Strawberry Perl

  • 我正在使用Sysinternals Process Explorer并观看“私人字节”

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

  • 有更好的方法吗?

  • 有谁可以解释为什么金额是字符串长度的两倍?

1 个答案:

答案 0 :(得分:6)

代码改编自http://www.perlmonks.org/index.pl?node_id=948181,所有赠予的费用均归Perlmonk BrowserUk所有。

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

  

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

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

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