[Python-Dev] Update on PEP 523 and adding a co_extra field to code objects

Christian Heimes christian at python.org
Tue Aug 30 06:28:11 EDT 2016


On 2016-08-30 01:14, Brett Cannon wrote:
> So the struct in question can be found at
> https://github.com/python/cpython/blob/2d264235f6e066611b412f7c2e1603866e0f7f1b/Include/code.h#L10 .
> The official docs say the fields can be changed at any time, so
> re-arranging them shouldn't break any ABI compatibility promises:
> https://docs.python.org/3/c-api/code.html#c.PyCodeObject . Would
> grouping all the fields of the same type together, sorting them by
> individual field size (i.e. PyObject*, void*, int, unsigned char*), and
> then adding the co_extra field at the end of the grouping of PyObject *
> fields do what you're suggesting?

You don't have to resort them all, just move co_firstlineno after
co_flags, so all int fields are together. Pointers are typically
alignment to multiple of 64 on a 64bit machine. In its current shape
PyCodeObject is padded with two unused areas of 32bit: 5 * int32 + 32
bits of padding, 9 * pointers (64 bits each), 1 * int32 + another 32
bits of padding, 3 * pointers. When you move co_firstlineno, you fill in
the gap.

Christian




More information about the Python-Dev mailing list