Hi Chris

Have a look at http://www.python.org/doc/2.3.4/whatsnew/section-pymalloc.html

for a description of what is going on.

Basically malloc is used to grab a big chunk of memory, then
python objects use bits of it.

Rgds

Tim

Chris S. wrote:
Donn Cave wrote:

In article <[EMAIL PROTECTED]>,
 "Chris S." <[EMAIL PROTECTED]> wrote:


Is it possible to determine how much memory is allocated by an arbitrary Python object? There doesn't seem to be anything in the docs about this, but considering that Python manages memory allocation, why would such a module be more difficult to design than say, the GC?



Sorry, I didn't follow that - such a module as what?


GC == Garbage Collector (http://docs.python.org/lib/module-gc.html)

Along with the kind of complicated internal implementation
details, you may need to consider the possibility that the
platform malloc() may reserve more than the allocated amount,
for its own bookkeeping but also for alignment.  It isn't
a reliable guide by any means, but something like this might
be at least entertaining -

   >>>    >>> class A:
   ...     def __init__(self, a):
   ...             self.a = a
   ...    >>> d = map(id, map(A, [0]*32))
   >>> d.sort()
   >>> k = 0
   >>> for i in d:
   ...     print i - k
   ...     k = i
   ...
This depends on the fact that id(a) returns a's storage
address.

I get very different results from one platform to another,
and I'm not sure what they mean, but at a guess, I think
you will see a fairly small number, like 40 or 48, that
represents the immediate allocation for the object, and
then a lot of intervals three or four times larger that
represent all the memory allocated in the course of creating
it.  It isn't clear that this is all still allocated -
malloc() doesn't necessarily reuse a freed block right
away, and in fact the most interesting thing about this
experiment is how different this part looks on different
platforms.  Of course we're still a bit in the dark as
to how much memory is really allocated for overhead.

Donn Cave, [EMAIL PROTECTED]


Are you referring to Python's general method of memory management? I was under the impression that the ISO C specification for malloc() dictates allocation of a fixed amount of memory. free(), not malloc(), handles deallocation. Am I wrong? Does Python use a custom non-standard implementation of malloc()?
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to