2013-03-01 60 views
1

以下是一個示例代碼文件,其名稱爲while.pl爲什麼perl編譯的代碼需要更多內存?

#!/usr/bin/perl 
use strict; 
use warnings; 
my $i=0; 
while (1) 
{ 
    print "Testing $i\n" ; 
    $i++ ; 
    sleep(1); 
} 

我以

perlcc -o compiled while.pl 

編譯該代碼然後我執行正常代碼while.pl和編譯代碼compiled。 我觀察到使用ps命令

ps axo %cpu,%mem,command | grep "while\|compiled" 

0.0 0.0 /usr/bin/perl ./while.pl 
0.0 0.1 ./compiled 

所以我的問題是內存和CPU使用率:

  • 爲什麼編譯後的代碼需要更多的內存相比,while.pl
  • 而我將如何避免編譯的Perl代碼的內存使用情況?
+2

僅使用* .pl文件,不是? – gaussblurinc 2013-03-01 19:49:28

+0

比較'/ proc/{pid}/maps'可能很有意思... – aschepler 2013-03-01 19:51:36

+0

我不明白,請你清楚解釋一下 - @ loldop – RoCkStUnNeRs 2013-03-01 19:52:51

回答

3

Perl代碼總是被編譯。你在做的是事先編譯它,而不是在運行時。

在運行時加載編譯後的表單需要更多的內存,因爲您正在加載正常加載的所有內容的編譯形式加載器。