Я выполнил верхний ответ здесь, см. ниже для кода, чтобы получить системную память, используемую в данной строке в моем Perl-коде. Я использую Windows 7 Home Basic, 64-разрядную версию, 4 ГБ оперативной памяти, 4,06 ГБ виртуальной памяти (как указано в дополнительных системных настройках в разделе «Мой компьютер»). Я получил следующее сообщение от perl в строке, прежде чем perl перейдет в состояние Недостаточно памяти.
Использование памяти: 1916346368
Если предположить, что это число в байтах (= 1,78 ГБ), почему Perl вышел из памяти? Как я могу получить общее использование памяти системы всеми процессами?
Блок кода для вычисления памяти показан ниже. Я использую Strawberry Perl 5.12.3.0
use Win32::OLE qw/in/;
sub memory_usage() {
my $objWMI = Win32::OLE->GetObject('winmgmts:\\\\.\\root\\cimv2');
my $processes = $objWMI->ExecQuery("select * from Win32_Process where ProcessId=$$");
foreach my $proc (in($processes)) {
return $proc->{WorkingSetSize};
}
}
print 'Memory usage: ', memory_usage(), "\n";
Perl -V дает следующую информацию: http://pastebin.com/mvF7YgKH
Обновление: проблема решена с помощью 64-битного Perl. Но я также заметил, что программа запускалась без проблем на 32-битном Perl на Ubuntu. Так что, возможно, Strawberry perl в Windows занимает больше памяти, чем perl в Ubuntu.