Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re^2: Memory usage double expected (run-time)

by LanX (Saint)
on Oct 27, 2022 at 09:00 UTC ( [id://11147732]=note: print w/replies, xml ) Need Help??


in reply to Re: Memory usage double expected
in thread Memory usage double expected

> Try $x = 'a' x (2**${\32});

yes, forcing the creation of the RHS into runtime works.

edit

Dave_The_M will know better, why the space of an inline constant wasn't released.

I suppose it's just an overlooked optimization.

Cheers Rolf
(addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^3: Memory usage double expected (run-time)
by eyepopslikeamosquito (Archbishop) on Oct 27, 2022 at 12:06 UTC

    Tim Bunce's excellent Profiling Memory Usage talk gives some insight into what's going on at the 09:20 minute mark:

    sub foo { my $var = "X" x 10_000_000; } foo();

    Tim explains that:

    1. The buffer for the $var lexical is preserved (for next time you call the subroutine).
    2. The compiler says hey "X" is a constant and 10_000_000 is a constant, so I'm gonna build you a 10 MB constant! And I'm going to keep it here to one side so when you call this subroutine again I can just copy it in for you! (aka Constant folding).

    With recursion, things get much worse (sorry, I couldn't bring myself to watch that part :).

    Though Tim's Devel::SizeMe module might be useful, AFAIK it is up for adoption and not being actively developed ATM.

    I also keep a list of Memory Tools References (from this list, Mini-Tutorial: Perl's Memory Management by ikegami is definitely worth reading).

      OK this makes sense.

      Perl can't know beforehand, how often this line is executed.

      Even if it cared to check that it's not inside a loop or sub.

      Cheers Rolf
      (addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
      Wikisyntax for the Monastery

Re^3: Memory usage double expected (run-time)
by dave_the_m (Monsignor) on Oct 27, 2022 at 12:17 UTC
    My initial thoughts:

    In general an assign should COW, but the rules are complex. It's not happening in this case. It's probably a bug.

    Dave.

Re^3: Memory usage double expected (run-time)
by cavac (Parson) on Oct 27, 2022 at 10:40 UTC

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11147732]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (2)
As of 2024-04-20 04:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found