Michael G Schwern wrote: > > On Wed, Oct 02, 2002 at 01:50:56PM +0200, H.Merijn Brand wrote: > > SYNOPSIS > > use Devel::Internals; > > A little broad. Perhaps Devel::Memory? > > > my $end = sbrk (); > > > > my @array = (1..10000); > > print "The creation of this array used ", > > sbrk () - $end, "bytes\n"; > > > > # Easier > > use Devel::Internals; > > > > my @array = (1..10000); > > MemUsed "creation of array"; > > > > my @dup = @array; > > MemUsed "duplication of array"; > > > > DESCRIPTION > > sbrk > > returns the current memory top. See sbrk(2) manual page > > I realize that sbrk() is a familiar concept to deep C programmers on > BSD-style systems, but in order for this to be useful to Perl > programmers, or even users not familiar with BSD, you're going to have > to name it something more descriptive than sbrk() and explain better > what it does.
If "what it does" is merely return the value of the C sbrk() function, then IMHO, sbrk() is a perfectly good name. However, as to other possible names -- how about ProcessSize() ? I'm not sure if this is really a valid description of what sbrk() returns, though. > It can still do the same thing as sbrk(), and you might even want to > leave in an alias to sbrk() so BSD core hackers can feel all warm and > fuzzy. > > > MemUsed ($msg) > > Used in void context reports the number of bytes used > > since the previous call to MemUsed with the message passed > > Global state is a Bad Thing. Consider when you have two different, > unrelated subroutines both calling MemUsed() in the same program. > foo() calls MemUsed() then bar() then foo() calls MemUsed() again > expecting to get the memory used since it's last call but it's > actually getting the memory used since bar() last called it. Perhaps MemUsed should keep track of where it was called from? Eg: sub MemUsed { my $sbrk = sbrk(); my $prior = \ $sbrks{join "::", (caller(1))[3, 0] }; if( defined $$prior ) { my $diff = $sbrk - $$prior; print ....; } $$prior = $sbrk; } This works fine as long as there is no recursion. If there *is* recursion, then the user need to stuff the return value of sbrk() in a variable, or somesuch. -- How many Monks would a Chipmonk chip, if a Chipmonk could chip Monks?