当我运行以下脚本时:
my @arr = [1..5000000];
for($i=0; $i<5000000; $i++) {
$arr[$i] = $i;
if($i % 1000000 == 0) {
print "$i\n";
}
}
Run Code Online (Sandbox Code Playgroud)
它消耗大约500 MB的内存.用于高级编译语言我希望它大约是5M*4B = 20MB(每个数字4个字节).
我猜这是因为每个值都是标量,而不是简单的二进制数.是否可以通过将这些值视为数字来减少内存占用,或者只有500 MB才能完成此任务?
试着学习Perl.我有一个填充了城市的阵列.我想通过引用子例程传递数组并打印每个城市输出.但是我有以下问题:
1)我可以在子例程中的while循环之前访问每个元素.但我无法访问while循环中的元素.我收到错误消息:
...
Use of uninitialized value in print at <filename> line 44, <GEN2> line 997 (#1)
Use of uninitialized value in print at <filename> line 44, <GEN2> line 998 (#1)
...
Run Code Online (Sandbox Code Playgroud)
以下是代码.我评论了什么打印和什么不打印(我试图删除我的解释不需要的代码......):
@cities;
#Assume cities is loaded successfully
&loadCities(getFileHandle('cities.txt'), $NUM_CITIES, \@cities);
&printElements(getFileHandle('names.txt'), \@cities);
sub printElements{
my $counter = 0;
my $arraySize = scalar $_[1];
# Prints fine!!!
print @{$_[1][($counter)%$arraySize];
while ((my $line = $_[0]->getline()) && $counter < 1000){
#Doesn't print. Generates the above error
print @{$_[1][($counter)%$arraySize];
$counter += 1; …Run Code Online (Sandbox Code Playgroud)