Psyduck - 可達鴨 之 鴨力山大2


Server : LiteSpeed
System : Linux premium217.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
User : alloknri ( 880)
PHP Version : 8.1.34
Disable Function : NONE
Directory :  /opt/alt/python312/include/python3.12/cpython/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python312/include/python3.12/cpython/objimpl.h
#ifndef Py_CPYTHON_OBJIMPL_H
#  error "this header file must not be included directly"
#endif

static inline size_t _PyObject_SIZE(PyTypeObject *type) {
    return _Py_STATIC_CAST(size_t, type->tp_basicsize);
}

/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
   vrbl-size object with nitems items, exclusive of gc overhead (if any).  The
   value is rounded up to the closest multiple of sizeof(void *), in order to
   ensure that pointer fields at the end of the object are correctly aligned
   for the platform (this is of special importance for subclasses of, e.g.,
   str or int, so that pointers can be stored after the embedded data).

   Note that there's no memory wastage in doing this, as malloc has to
   return (at worst) pointer-aligned memory anyway.
*/
#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
#   error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
#endif

static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) {
    size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize);
    size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
    return _Py_SIZE_ROUND_UP(size, SIZEOF_VOID_P);
}


/* This example code implements an object constructor with a custom
   allocator, where PyObject_New is inlined, and shows the important
   distinction between two steps (at least):
       1) the actual allocation of the object storage;
       2) the initialization of the Python specific fields
      in this storage with PyObject_{Init, InitVar}.

   PyObject *
   YourObject_New(...)
   {
       PyObject *op;

       op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
       if (op == NULL) {
           return PyErr_NoMemory();
       }

       PyObject_Init(op, &YourTypeStruct);

       op->ob_field = value;
       ...
       return op;
   }

   Note that in C++, the use of the new operator usually implies that
   the 1st step is performed automatically for you, so in a C++ class
   constructor you would start directly with PyObject_Init/InitVar. */


typedef struct {
    /* user context passed as the first argument to the 2 functions */
    void *ctx;

    /* allocate an arena of size bytes */
    void* (*alloc) (void *ctx, size_t size);

    /* free an arena */
    void (*free) (void *ctx, void *ptr, size_t size);
} PyObjectArenaAllocator;

/* Get the arena allocator. */
PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator);

/* Set the arena allocator. */
PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator);


/* Test if an object implements the garbage collector protocol */
PyAPI_FUNC(int) PyObject_IS_GC(PyObject *obj);


/* Code built with Py_BUILD_CORE must include pycore_gc.h instead which
   defines a different _PyGC_FINALIZED() macro. */
#ifndef Py_BUILD_CORE
   // Kept for backward compatibility with Python 3.8
#  define _PyGC_FINALIZED(o) PyObject_GC_IsFinalized(o)
#endif


// Test if a type supports weak references
PyAPI_FUNC(int) PyType_SUPPORTS_WEAKREFS(PyTypeObject *type);

PyAPI_FUNC(PyObject **) PyObject_GET_WEAKREFS_LISTPTR(PyObject *op);

PyAPI_FUNC(PyObject *) PyUnstable_Object_GC_NewWithExtraData(PyTypeObject *,
                                                             size_t);
Name
Size
Permissions
Options
abstract.h
7.686 KB
-rw-r--r--
bytearrayobject.h
1.136 KB
-rw-r--r--
bytesobject.h
4.551 KB
-rw-r--r--
cellobject.h
1.051 KB
-rw-r--r--
ceval.h
1.611 KB
-rw-r--r--
classobject.h
2.192 KB
-rw-r--r--
code.h
15.809 KB
-rw-r--r--
compile.h
2.598 KB
-rw-r--r--
complexobject.h
1.219 KB
-rw-r--r--
context.h
1.919 KB
-rw-r--r--
descrobject.h
1.604 KB
-rw-r--r--
dictobject.h
4.576 KB
-rw-r--r--
fileobject.h
0.799 KB
-rw-r--r--
fileutils.h
0.227 KB
-rw-r--r--
floatobject.h
0.879 KB
-rw-r--r--
frameobject.h
1.082 KB
-rw-r--r--
funcobject.h
7.02 KB
-rw-r--r--
genobject.h
3.238 KB
-rw-r--r--
import.h
1.585 KB
-rw-r--r--
initconfig.h
7.637 KB
-rw-r--r--
interpreteridobject.h
0.378 KB
-rw-r--r--
listobject.h
1.595 KB
-rw-r--r--
longintrepr.h
4.774 KB
-rw-r--r--
longobject.h
4.569 KB
-rw-r--r--
memoryobject.h
2.219 KB
-rw-r--r--
methodobject.h
2.223 KB
-rw-r--r--
modsupport.h
4.234 KB
-rw-r--r--
object.h
20.715 KB
-rw-r--r--
objimpl.h
3.238 KB
-rw-r--r--
odictobject.h
1.28 KB
-rw-r--r--
picklebufobject.h
0.828 KB
-rw-r--r--
pthread_stubs.h
3.423 KB
-rw-r--r--
pyctype.h
1.354 KB
-rw-r--r--
pydebug.h
1.38 KB
-rw-r--r--
pyerrors.h
4.176 KB
-rw-r--r--
pyfpe.h
0.434 KB
-rw-r--r--
pyframe.h
1.444 KB
-rw-r--r--
pylifecycle.h
3.343 KB
-rw-r--r--
pymem.h
3.3 KB
-rw-r--r--
pystate.h
16.824 KB
-rw-r--r--
pythonrun.h
4.788 KB
-rw-r--r--
pythread.h
1.385 KB
-rw-r--r--
pytime.h
12.111 KB
-rw-r--r--
setobject.h
2.096 KB
-rw-r--r--
sysmodule.h
0.478 KB
-rw-r--r--
traceback.h
0.434 KB
-rw-r--r--
tupleobject.h
1.345 KB
-rw-r--r--
unicodeobject.h
34.469 KB
-rw-r--r--
warnings.h
0.551 KB
-rw-r--r--
weakrefobject.h
1.984 KB
-rw-r--r--