(original) (raw)


On Dec 10, 2012, at 2:48 AM, Christian Heimes <christian@python.org> wrote:

On the other hand every lookup and collision checks needs an additional
multiplication, addition and pointer dereferencing:

entry = entries\_baseaddr + sizeof(PyDictKeyEntry) \* idx

Currently, the dict implementation allows alternative lookup
functions based on whether the keys are all strings.
The choice of lookup function is stored in a function pointer.
That lets each lookup use the currently active lookup
function without having to make any computations or branches.

Likewise, the lookup functions could be swapped between
char, short, long, and ulong index sizes during the resize step.
IOW, the selection only needs to be made once per resize,
not one per lookup.


Raymond