From: Sam Gross Date: Mon, 27 Jan 2025 17:14:51 +0000 (-0500) Subject: gh-128954: Reorder _PyInterpreterFrame fields for reduced memory usage (#128958) X-Git-Tag: v3.14.0a5~210 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a6a8c6f86e811f9fcdb577bc1d9b85fbf86c8267;p=thirdparty%2FPython%2Fcpython.git gh-128954: Reorder _PyInterpreterFrame fields for reduced memory usage (#128958) This reduces the size of _PyInterpreterFrame by 8 bytes on 64-bit platforms using the free threading build due to alignment requirements. This allows for slightly more recursive calls into the interpreter (from C), but `test_call.test_super_deep` still crashes. --- diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h index 14dc91e54298..155a6f3ce054 100644 --- a/Include/internal/pycore_frame.h +++ b/Include/internal/pycore_frame.h @@ -69,11 +69,11 @@ typedef struct _PyInterpreterFrame { PyObject *f_locals; /* Strong reference, may be NULL. Only valid if not on C stack */ PyFrameObject *frame_obj; /* Strong reference, may be NULL. Only valid if not on C stack */ _Py_CODEUNIT *instr_ptr; /* Instruction currently executing (or about to begin) */ + _PyStackRef *stackpointer; #ifdef Py_GIL_DISABLED /* Index of thread-local bytecode containing instr_ptr. */ int32_t tlbc_index; #endif - _PyStackRef *stackpointer; uint16_t return_offset; /* Only relevant during a function call */ char owner; #ifdef Py_DEBUG diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index d839893d2c65..39857445a022 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1621,7 +1621,7 @@ class SizeofTest(unittest.TestCase): return sys._getframe() x = func() if support.Py_GIL_DISABLED: - INTERPRETER_FRAME = '10PhcP' + INTERPRETER_FRAME = '9PihcP' else: INTERPRETER_FRAME = '9PhcP' check(x, size('3PiccPP' + INTERPRETER_FRAME + 'P'))