mirror of
https://github.com/python/cpython.git
synced 2025-07-27 13:14:41 +00:00
Give meaning to the oparg for BUILD_MAP: estimated size of the dictionary.
Allows dictionaries to be pre-sized (upto 255 elements) saving time lost to re-sizes with their attendant mallocs and re-insertions. Has zero effect on small dictionaries (5 elements or fewer), a slight benefit for dicts upto 22 elements (because they had to resize once anyway), and more benefit for dicts upto 255 elements (saving multiple resizes during the build-up and reducing the number of collisions on the first insertions). Beyond 255 elements, there is no addional benefit.
This commit is contained in:
parent
3c887b2802
commit
fd7ed407d7
6 changed files with 26 additions and 6 deletions
|
@ -2922,11 +2922,9 @@ compiler_visit_expr(struct compiler *c, expr_ty e)
|
|||
case IfExp_kind:
|
||||
return compiler_ifexp(c, e);
|
||||
case Dict_kind:
|
||||
/* XXX get rid of arg? */
|
||||
ADDOP_I(c, BUILD_MAP, 0);
|
||||
n = asdl_seq_LEN(e->v.Dict.values);
|
||||
/* We must arrange things just right for STORE_SUBSCR.
|
||||
It wants the stack to look like (value) (dict) (key) */
|
||||
ADDOP_I(c, BUILD_MAP, (n>255 ? 255 : n));
|
||||
n = asdl_seq_LEN(e->v.Dict.values);
|
||||
for (i = 0; i < n; i++) {
|
||||
VISIT(c, expr,
|
||||
(expr_ty)asdl_seq_GET(e->v.Dict.values, i));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue