Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Optimize _PyObject_IS_GC in free-threaded build #114733

Open
@colesbury

Description

@colesbury

Feature or enhancement

@nascheme writes the following suggestion (from #114564 (comment)):

_PyObject_IS_GC() could be optimized in the nogil build. That function is a bit expensive since it has to check for tp_is_gc() and possibly call it. Now that all objects have ob_gc_bits, we could store the "IS GC" status as another bit there, when the object is allocated.

I think this might require a bit of refactoring, but worth doing eventually. At a glance:

  • _PyObject_GC_New() (and related functions) could initialize ob_gc_bits with the "IS GC" set
  • PyType_GenericAlloc() would also need to initialize ob_gc_bits with the "IS GC" set if the type is a GC type.
  • _Py_NewReference() requires some care. It. currently initializes ob_gc_bits to zero and it's used after "allocating" objects from freelists.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions