[Python-Dev] stackable ints [stupid idea (ignore) :v]
Aaron Watters
arw at ifu.net
Thu Jun 10 15:40:51 CEST 1999
While we're talking about stacks...
I've always considered it a major shame that Python ints and floats
and chars and stuff have anything to do with dynamic allocation, and I
always suspected it might be a major speed performance boost if there
was
some way they could be manipulated without the need for dynamic
memory management.
One conceivable alternative approach would change the basic manipulation
of
objects so that instead of representing objects via pyobject pointers
everywhere
represent them using two "slots" in a structure for each object,
one of which is a type descriptor pointer and the other
being a (void *) which could contain the data directly for small objects
such as ints, floats, chars. In this case, for example, integer
addition would
never require any memory management, as it shouldn't, I think, in a
perfect
world.
IE instead of
C-stack or static: Heap:
(pyobject *) ------------> (refcount, typedescr, data ...)
in general you get
(typedescr
repr* ----------------------> (refcount, data, ...)
)
or for small objects like ints and floats and chars simply
(typedescr,
value)
with no dereferencing or memory management required. My feeling is
that common things like arithmetic and indexing lists of integers and
stuff could
be much faster under this approach since it reduces memory management
overhead and fragmentation, dereferencing, etc...
One bad thing, of course, is that this might be a drastic assault on the
way existing code works... Unless I'm just not being creative enough
with my thinking. Is this a good idea? If so, is there any way to add
it
to the interpreter without breaking extension modules and everything
else?
If Python 2.0 will break stuff anyway, would this be an good change
to the internals?
Curious... -- Aaron Watters
ps: I suppose another gotcha is "when do you do increfs/decrefs?"
because
they no longer make sense for ints in this case... maybe add a flag
to the
type descriptor "increfable" and assume that the typedescriptors are
always
in the CPU cache (?). This would slow down increfs by a couple
cycles...
Would it be worth it? Only the benchmark knows... Another fix would
be
to put the refcount in the static side with no speed penalty
(typedescr
repr* ----------------------> data
refcount
)
but would that be wasteful of space?
More information about the Python-Dev
mailing list