Add fast-path for comparing interned (true) string objects.

This patch boosts performance for comparing identical string object
by some 20% on my machine while not causing any noticable slow-down
for other operations (according to tests done with pybench).
This commit is contained in:
Marc-André Lemburg 2001-11-07 14:54:49 +00:00
parent f0b11d2893
commit c52d713b7a
1 changed files with 15 additions and 0 deletions

View File

@ -1778,6 +1778,21 @@ eval_frame(PyFrameObject *f)
x = res ? Py_True : Py_False; x = res ? Py_True : Py_False;
Py_INCREF(x); Py_INCREF(x);
} }
else if (v == w && PyString_CheckExact(v)) {
/* Fast-path for comparing interned strings */
switch (oparg) {
case EQ: x = Py_True; break;
case LE: x = Py_True; break;
case GE: x = Py_True; break;
case NE: x = Py_False; break;
case GT: x = Py_False; break;
case LT: x = Py_False; break;
case IS: x = Py_True; break;
case IS_NOT: x = Py_False; break;
default: goto slow_compare;
}
Py_INCREF(x);
}
else { else {
slow_compare: slow_compare:
x = cmp_outcome(oparg, v, w); x = cmp_outcome(oparg, v, w);