New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-100146: Steal references from stack when building a list #100147
base: main
Are you sure you want to change the base?
Conversation
When executing the BUILD_LIST opcode, steal the references from the stack, in a manner similar to the BUILD_TUPLE opcode. Implement this by offloading the logic to a new private API, _PyList_FromArraySteal(), that works similarly to _PyTuple_FromArraySteal(). This way, instead of performing multiple stack pointer adjustments while the list is being initialized, the stack is adjusted only once and a fast memory copy operation is performed in one fell swoop.
If you want to schedule another build, you need to add the " |
I've requested a buildbot build to make sure there isn't some dumb issue with refleaks. |
Improve ``BUILD_LIST`` opcode so that it works similarly to the | ||
``BUILD_TUPLE`` opcode, by stealing references from the stack rather than | ||
repeatedly using stack operations to set list elements. Implementation | ||
details are in a new private API :c:func:`_PyList_FromArraySteal`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
details are in a new private API :c:func:`_PyList_FromArraySteal`. | |
details are in a new private API :c:func:`!_PyList_FromArraySteal`. |
No need to link to private functions.
Improve ``BUILD_LIST`` opcode so that it works similarly to the | ||
``BUILD_TUPLE`` opcode, by stealing references from the stack rather than |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Improve ``BUILD_LIST`` opcode so that it works similarly to the | |
``BUILD_TUPLE`` opcode, by stealing references from the stack rather than | |
Improve :opcode:`BUILD_LIST` so that it works similarly to | |
:opcode:`BUILD_TUPLE`, by stealing references from the stack rather than |
I don't know what's up with the ARM64 Windows buildbot, but it's been failing the same way for at least three days, so no need to worry that this PR could somehow have made it go red. |
PyObject * | ||
_PyList_FromArraySteal(PyObject *const *src, Py_ssize_t n) | ||
{ | ||
if (n == 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why special case 0
?
When executing the BUILD_LIST opcode, steal the references from the stack, in a manner similar to the BUILD_TUPLE opcode. Implement this by offloading the logic to a new private API, _PyList_FromArraySteal(), that works similarly to _PyTuple_FromArraySteal().
This way, instead of performing multiple stack pointer adjustments while the list is being initialized, the stack is adjusted only once and a fast memory copy operation is performed in one fell swoop.