I'm not sure you are interpreting
size correctly. It is not the total size of all the memory used, but the segment size you desire. You need to set the segment size in the constructor. You were leaving it as zero by default.
#!/usr/bin/perl
use strict;
use warnings;
use IPC::ShareLite;
use Storable qw( freeze thaw );
# dosn't show segment size correctly without size set.
my $share;
eval {
$share = IPC::ShareLite->new(
-key => 4812,
-create => 'yes',
-destroy => 'no',
-mode => 0600,
-size => 5000
);
};
if ($@) {
warn "Woops: $@";
exit;
}
# Let's use some memory
my @array = (0 .. 1500000);
$share->store( freeze( \@array ) );
my $size = $share->size;
print "Size: $size\n";
my $num_segments = $share->num_segments;
print "Segments: $num_segments\n";
my $usage = $share->size * $share->num_segments;
print "Usage: $usage\n";
OUTPUT:
$ ./971163.pl
Size: 5000
Segments: 207
Usage: 1035000