[Python-Dev] tracking memory consumption

Peter Funk pf@artcom-gmbh.de
Mon, 28 Feb 2000 19:09:37 +0100 (MET)


Hi!

In PR#214 Martin v. Loewis suggests a sizeof function as result of
request to python-help.  I've followed the thread silently until now.

On platforms with virtual memory subsystem this is usually a not an
issue.  On embedded systems and ancient OSes (like MS-Dos) it is often
useful, if applications can estimate how much memory their data consumes.

The sizeof() function proposed by Martin is only one possible
approach I can think of.  Another approach would be encapsulationg the
'malloc/free'-logic into a wrapper, that traces all allocations und
deallocations in a special private 'usedmem' variable, which could
be queried by a function sys.usedmem() returning an integer.

Very often this is more convinient than a sizeof() function, because
you don't need to embed the summing into a maybe complicated nested
object data structure.  Although 'usedmem' wouldn't return a precise
measure, it is often sufficient to estimate and it also should be
rather easy to implement.

We have implemented this approach years ago here in a Modula-2
based system, where we however had one great advantage:  the Modula-2
Storage.DEALLOCATE procedure has a second parameter giving the size
of the data, which is missing from the signature of the C-library
free() function.  So a wrapper around 'free()' would have to use an
additional hash or has to know something about the internals of the
underlying malloc library.  The former of course would hurt portability.

Regards from Germany, Peter
-- 
Peter Funk, Oldenburger Str.86, D-27777 Ganderkesee, Germany, Fax:+49 4222950260
office: +49 421 20419-0 (ArtCom GmbH, Grazer Str.8, D-28359 Bremen)