diff options
author | Raymond Hettinger <python@rcn.com> | 2004-02-13 11:36:39 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-02-13 11:36:39 (GMT) |
commit | 4bb9540dd6eddaf60b908796c2412696a8870bd1 (patch) | |
tree | f2989cf9d6895dec915f307b40cd6e9a276991ce /Misc/NEWS | |
parent | 4a8d42f73f9767622f32468c02cefe616ccb34cf (diff) | |
download | cpython-4bb9540dd6eddaf60b908796c2412696a8870bd1.zip cpython-4bb9540dd6eddaf60b908796c2412696a8870bd1.tar.gz cpython-4bb9540dd6eddaf60b908796c2412696a8870bd1.tar.bz2 |
* Optimized list appends and pops by making fewer calls the underlying system
realloc(). This is achieved by tracking the overallocation size in a new
field and using that information to skip calls to realloc() whenever
possible.
* Simplified and tightened the amount of overallocation. For larger lists,
this overallocates by 1/8th (compared to the previous scheme which ranged
between 1/4th to 1/32nd over-allocation). For smaller lists (n<6), the
maximum overallocation is one byte (formerly it could be upto eight bytes).
This saves memory in applications with large numbers of small lists.
* Eliminated the NRESIZE macro in favor of a new, static list_resize function
that encapsulates the resizing logic. Coverting this back to macro would
give a small (under 1%) speed-up. This was too small to warrant the loss
of readability, maintainability, and de-coupling.
* Some functions using NRESIZE had grown unnecessarily complex in their
efforts to bend to the macro's calling pattern. With the new list_resize
function in place, those other functions could be simplified. That is
being saved for a separate patch.
* The ob_item==NULL check could be eliminated from the new list_resize
function. This would entail finding each piece of code that sets ob_item
to NULL and adding a new line to invalidate the overallocation tracking
field. Rather than impose a new requirement on other pieces of list code,
it was preferred to leave the NULL check in place and retain the benefits
of decoupling, maintainability and information hiding (only PyList_New()
and list_sort() need to know about the new field). This approach also
reduces the odds of breaking an extension module.
(Collaborative effort by Raymond Hettinger, Hye-Shik Chang, Tim Peters,
and Armin Rigo.)
Diffstat (limited to 'Misc/NEWS')
-rw-r--r-- | Misc/NEWS | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -12,6 +12,17 @@ What's New in Python 2.4 alpha 1? Core and builtins ----------------- +- Optimized list resize operations to make fewer calls to the system + realloc(). Significantly speeds up list appends, list pops, + list comprehensions, and the list contructor (when the input iterable + length is not known). + +- Changed the internal list over-allocation scheme. For larger lists, + overallocation ranged between 3% and 25%. Now, it is a constant 12%. + For smaller lists (n<=5), overallocation was upto eight bytes. Now, + the overallocation is no more than one byte -- this improves space + utilization for applications that have large numbers of small lists. + - Support for arbitrary objects supporting the read-only buffer interface as the co_code field of code objects (something that was only possible to create from C code) has been removed. |