in reply to why does this array take up so much memory?

Perl is not the most memory-efficient of languages. Quite the opposite. Many design decisions were made that trade memory for speed. For example, arrays are padded so you don't have to reallocate memory when they grow.

Playing around with Devel::Size can be informative.

You might find the PDL modules of use - they're good at efficient manipulation of N-dimensional arrays.

  • Comment on Re: why does this array take up so much memory?

Replies are listed 'Best First'.
Devel::Size
by htoug (Deacon) on Jan 27, 2003 at 12:28 UTC
    Devel::Size is very informative:
    use strict; use Devel::Size qw(size total_size); my $double; my @array; my @matrix; $double = 1.0; for my $x (0..9) { $array[$x] = 1.0; for my $y (0..9) { $matrix[$x][$y] = 1.0; } } print "Double: ", size(\$double), ", ", total_size(\$double), "\n"; print "Array: ", size(\@array), ", ", total_size(\@array), "\n"; print "Matrix: ", size(\@matrix), ", ", total_size(\@matrix), "\n";
    gives these results running on my Alpha with Tru64:
    Double: 24, 24 Array: 168, 408 Matrix: 168, 4488
    So a matrix of 10*10 elements cost 4.5 K, giving 45 bytes pr element - not too bad.

    Try other sizes for yourself, and go either the PDL or the Inline::C way, as others have recommended.