* amusing CoW string dedupe example
@ 2020-06-11 19:39 Eric Wong
0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2020-06-11 19:39 UTC (permalink / raw)
To: meta
I've always known hash keys get deduplicated in Perl to save RAM
for a while; but it turns out that it's possible to (ab)use them
for dynamic strings even when the hash doesn't live beyond a
subroutine scope.
Looks like we'll be able to save RAM in some places :D
The following script takes between 5-9M of RAM depending on the
version of Perl I'm using (tested down to 5.16.3), but nearly 1G
if the early return is uncommented in the `dedupe' sub:
----8<----
#!perl -w
use strict;
use Devel::Peek;
sub dedupe {
my ($k) = @_;
#return $k; # uncomment to disable CoW dedupe, needs ~1G of RAM
my %cow = ( $k => undef );
((keys %cow)[0]);
}
my $n = 3_600_000;
my $k = pack('S*',($n + 1)..($n + 50000)); # uint16_t array[50000]
my @x = map { dedupe($k) } (1..10000);
{
no warnings 'once';
$Devel::Peek::pv_limit = 10;
}
Dump(\@x);
print 'length: ',length($k), "\n";
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-06-11 19:39 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-11 19:39 amusing CoW string dedupe example Eric Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).