An update ... though stuff like '=' assignments make this entirely less than obvious. Check these stats out. use Devel::Size 'total_size';
$ARY[ $_ ] = ? for 1 .. 1_000_000;
print total_size( \ @ARY ) . "\n";
# Do this as a comparison of a sparse array
$ARY_B[ 1_000_000 ] = 1;
print total_size( \ @ARY_B );
Code | Size |
sparse | 4,000,072 |
undef | 16,194,340 |
1 | 20,195,340 |
\ undef | 20,194,352 |
\ !1 | 20,194,377 |
\ !!1 | 20,194,378 |
\ 1 | 20,195,340 |
( 1 + $| ) | 24,194,340 |
\ ( 1 + $| ) | 40,194,340 |
!1 | 41,194,340 |
!!1 | 42,194,340 |
I use !! $x because the return value is one of the values PL_sv_yes or PL_sv_no both of which are a single scalar that is shared through the entire process, forever. It is somewhat like undef being shared everywhere. You can have a million return values from !! $x and have them take up no space or you can have a million 1's and every one takes up a whole SV's worth of memory. The choice is obvious.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|