use Win32::API::Prototype; ApiLink( 'Kernel32', q[ HANDLE GetProcessHeap(void) ] ) or die $^E; ApiLink( 'kernel32', q[ DWORD HeapCompact( HANDLE hHeap, DWORD dwFlags ) ] ) or die $^E; my @idsMap; my @AoH; my $cnt = 1; $|++; for my $i ( 1 .. 40 ) { my $start = "aaa"; my %hash; keys %hash = 250_000; printf "\r$i\t"; for my $j ( 1 .. 250000 ) { $hash{ "$cnt $i $j $start" } = $cnt; $cnt++; $start++; } $AoH[$i] = \%hash; } print "Total size: ", total_size( \@AoH ); undef @AoH; print "did undef of array\n"; <>; print HeapCompact( GetProcessHeap( 0 ), 0 ) or die $^E; ...