Message234198
The lookkey routines in Object/setobject.c have logic to track the first open "freeslot" in a search.
The benefit is that new keys can reuse previously deleted slots. The benefit only occurs in cases where keys are added, then some removed, and then more added with no intervening resizes (which clear all dummy entries) and only when the newly added keys happen to land on previously deleted entries.
The cost of the optimization is the extra logic in the inner search loop, an extra freeslot stackframe field that needs to be saved and restored, and extra logic on the loop exit. It also causes dummies to "leak" out of the lookkey routines so that the code in contains(), discard(), and insert() all have to check for the dummy case.
This patch removes the freeslot tracking. It saves one field on the stackframe, simplifies the lookkey inner-loop logic, simplifies the lookkey "found_null" logic, it confines knowledge of dummies to just the lookkey functions, and it simplifies the code in the insert(), contains(), and discard() functions.
In short, it looks like the freeslot idea was a net negative -- it optimized an uncommon case at the cost of slowing and complicating the common cases. |
|
Date |
User |
Action |
Args |
2015-01-17 20:46:06 | rhettinger | set | recipients:
+ rhettinger |
2015-01-17 20:46:06 | rhettinger | set | messageid: <1421527566.61.0.766748710579.issue23259@psf.upfronthosting.co.za> |
2015-01-17 20:46:06 | rhettinger | link | issue23259 messages |
2015-01-17 20:46:06 | rhettinger | create | |
|