in reply to Total Memory Size Used up by a Perl Script

Are you saying you want to know the size of the entire process running the script? On Unix-like systems, Proc::ProcessTable provides a nice API for it:
use Proc::ProcessTable; my $t = Proc::ProcessTable->new(); foreach my $p ( @{$t->table} ) { if($p->pid() == $$) { print "I'm ", $p->size(), " bytes big.\n"; last; } }

Replies are listed 'Best First'.
Re^2: Total Memory Size Used up by a Perl Script
by monkfan (Curate) on Oct 08, 2005 at 08:48 UTC
    Thanks so much for your answer.

    My intention actually is to measure the total memory size of all data structure used in my script.
    I'm sorry if I wasn't being clear in my OP.

    Then I try this simple script, comparing it with Devel::Size.
    #!/usr/bin/perl -w use strict; use Proc::ProcessTable; use Devel::Size qw(size); my @arr = ('A' .. 'M'); my $devel_size = size(\@arr); print "With DEVEL::SIZE I'm $devel_size bytes big\n"; my $t = Proc::ProcessTable->new(); foreach my $p ( @{$t->table} ) { if($p->pid() == $$) { print "With Proc::ProcessTable I'm ", $p->size(), " bytes big.\n"; last; } }
    It gives:
    With DEVEL::SIZE I'm 104 bytes big With Proc::ProcessTable I'm 5357568 bytes big.
    The difference here is so big. I wonder why? Does Proc::ProcessTable gives the size which I intend to get? If no, is there a way to achieve my original intention?

    Regards,
    Edward

      As you said yourself, Devel::Size only gives you the size of a single data structure, whereas Proc::ProcessTable gives you the size of the whole running process, including perl interpreter, loaded modules etc.

      That being said, 5MB seems kinda big for what you're doing here. Try EvanCarrol's suggestion as well to confirm the result, it should give you the same as Proc::ProcessTable (search.cpan.org seems to be having some problems atm, so I can't download the modules myself to check.)