Issue29233
This issue tracker has been migrated to GitHub,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2017-01-10 23:05 by vstinner, last changed 2022-04-11 14:58 by admin. This issue is now closed.
| Messages (3) | |||
|---|---|---|---|
| msg285165 - (view) | Author: STINNER Victor (vstinner) * ![]() |
Date: 2017-01-10 23:05 | |
Recently, I modified call_method() and call_maybe() of Objects/typeobject.c to avoid the creation of a temporary tuple: replace Py_VaBuildValue()+PyObject_Call() with the new _PyObject_VaCallFunctionObjArgs(). But while working on the issue #28870, I noticed that _PyObject_VaCallFunctionObjArgs() is not efficient and can be avoided. In typeobject.c, the number of arguments is hardcoded, so we don't need complex functions to compute the number of arguments and decide to allocate an array on the stack or on the heap. |
|||
| msg285166 - (view) | Author: Roundup Robot (python-dev) ![]() |
Date: 2017-01-10 23:22 | |
New changeset b9404639a18c by Victor Stinner in branch 'default': call_method() now uses _PyObject_FastCall() https://hg.python.org/cpython/rev/b9404639a18c |
|||
| msg285167 - (view) | Author: STINNER Victor (vstinner) * ![]() |
Date: 2017-01-10 23:22 | |
Full commit message: changeset: 106081:b9404639a18c tag: tip user: Victor Stinner <victor.stinner@gmail.com> date: Wed Jan 11 00:07:40 2017 +0100 files: Include/abstract.h Objects/abstract.c Objects/typeobject.c description: call_method() now uses _PyObject_FastCall() Issue #29233: Replace the inefficient _PyObject_VaCallFunctionObjArgs() with _PyObject_FastCall() in call_method() and call_maybe(). Only a few functions call call_method() and call it with a fixed number of arguments. Avoid the complex and expensive _PyObject_VaCallFunctionObjArgs() function, replace it with an array allocated on the stack with the exact number of argumlents. It reduces the stack consumption, bytes per call, before => after: test_python_call: 1168 => 1152 (-16 B) test_python_getitem: 1344 => 1008 (-336 B) test_python_iterator: 1568 => 1232 (-336 B) Remove the _PyObject_VaCallFunctionObjArgs() function which became useless. Rename it to object_vacall() and make it private. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022-04-11 14:58:41 | admin | set | github: 73419 |
| 2017-01-11 00:26:53 | vstinner | set | status: open -> closed resolution: fixed |
| 2017-01-10 23:22:57 | vstinner | set | messages: + msg285167 |
| 2017-01-10 23:22:32 | python-dev | set | nosy:
+ python-dev messages: + msg285166 |
| 2017-01-10 23:14:42 | vstinner | set | type: performance components: + Interpreter Core versions: + Python 3.7 |
| 2017-01-10 23:14:31 | vstinner | set | nosy:
+ serhiy.storchaka |
| 2017-01-10 23:05:00 | vstinner | create | |

