Memory Allocation?
Chris S.
chrisks at NOSPAM.udel.edu
Mon Feb 7 19:26:18 EST 2005
Donn Cave wrote:
> In article <8GCNd.9880$ya6.9761 at trndny01>,
> "Chris S." <chrisks at NOSPAM.udel.edu> 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, donn at u.washington.edu
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()?
More information about the Python-list
mailing list