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(现在,我可能会这样做),但是:
有没有更好的办法?
任何人都可以解释为什么数量是字符串长度的两倍?
代码改编自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新标量的赋值操作也是如此.像往常一样,即使右手表达式不再被引用,内存也不会立即被释放.
如上所示,对现有标量进行操作可避免第二次分配.
| 归档时间: |
|
| 查看次数: |
1560 次 |
| 最近记录: |