|
| 1 | +#ifndef Py_INTERNAL_PYMEM_INIT_H |
| 2 | +#define Py_INTERNAL_PYMEM_INIT_H |
| 3 | +#ifdef __cplusplus |
| 4 | +extern "C" { |
| 5 | +#endif |
| 6 | + |
| 7 | +#ifndef Py_BUILD_CORE |
| 8 | +# error "this header requires Py_BUILD_CORE define" |
| 9 | +#endif |
| 10 | + |
| 11 | +#include "pycore_pymem.h" |
| 12 | + |
| 13 | + |
| 14 | +/********************************/ |
| 15 | +/* the allocators' initializers */ |
| 16 | + |
| 17 | +extern void * _PyMem_RawMalloc(void *, size_t); |
| 18 | +extern void * _PyMem_RawCalloc(void *, size_t, size_t); |
| 19 | +extern void * _PyMem_RawRealloc(void *, void *, size_t); |
| 20 | +extern void _PyMem_RawFree(void *, void *); |
| 21 | +#define PYRAW_ALLOC {NULL, _PyMem_RawMalloc, _PyMem_RawCalloc, _PyMem_RawRealloc, _PyMem_RawFree} |
| 22 | + |
| 23 | +#ifdef WITH_PYMALLOC |
| 24 | +extern void* _PyObject_Malloc(void *, size_t); |
| 25 | +extern void* _PyObject_Calloc(void *, size_t, size_t); |
| 26 | +extern void _PyObject_Free(void *, void *); |
| 27 | +extern void* _PyObject_Realloc(void *, void *, size_t); |
| 28 | +# define PYOBJ_ALLOC {NULL, _PyObject_Malloc, _PyObject_Calloc, _PyObject_Realloc, _PyObject_Free} |
| 29 | +#else |
| 30 | +# define PYOBJ_ALLOC PYRAW_ALLOC |
| 31 | +#endif // WITH_PYMALLOC |
| 32 | + |
| 33 | +#define PYMEM_ALLOC PYOBJ_ALLOC |
| 34 | + |
| 35 | +extern void* _PyMem_DebugRawMalloc(void *, size_t); |
| 36 | +extern void* _PyMem_DebugRawCalloc(void *, size_t, size_t); |
| 37 | +extern void* _PyMem_DebugRawRealloc(void *, void *, size_t); |
| 38 | +extern void _PyMem_DebugRawFree(void *, void *); |
| 39 | + |
| 40 | +extern void* _PyMem_DebugMalloc(void *, size_t); |
| 41 | +extern void* _PyMem_DebugCalloc(void *, size_t, size_t); |
| 42 | +extern void* _PyMem_DebugRealloc(void *, void *, size_t); |
| 43 | +extern void _PyMem_DebugFree(void *, void *); |
| 44 | + |
| 45 | +#define PYDBGRAW_ALLOC(runtime) \ |
| 46 | + {&(runtime).allocators.debug.raw, _PyMem_DebugRawMalloc, _PyMem_DebugRawCalloc, _PyMem_DebugRawRealloc, _PyMem_DebugRawFree} |
| 47 | +#define PYDBGMEM_ALLOC(runtime) \ |
| 48 | + {&(runtime).allocators.debug.mem, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree} |
| 49 | +#define PYDBGOBJ_ALLOC(runtime) \ |
| 50 | + {&(runtime).allocators.debug.obj, _PyMem_DebugMalloc, _PyMem_DebugCalloc, _PyMem_DebugRealloc, _PyMem_DebugFree} |
| 51 | + |
| 52 | +extern void * _PyMem_ArenaAlloc(void *, size_t); |
| 53 | +extern void _PyMem_ArenaFree(void *, void *, size_t); |
| 54 | + |
| 55 | +#ifdef Py_DEBUG |
| 56 | +# define _pymem_allocators_standard_INIT(runtime) \ |
| 57 | + { \ |
| 58 | + PYDBGRAW_ALLOC(runtime), \ |
| 59 | + PYDBGMEM_ALLOC(runtime), \ |
| 60 | + PYDBGOBJ_ALLOC(runtime), \ |
| 61 | + } |
| 62 | +#else |
| 63 | +# define _pymem_allocators_standard_INIT(runtime) \ |
| 64 | + { \ |
| 65 | + PYRAW_ALLOC, \ |
| 66 | + PYMEM_ALLOC, \ |
| 67 | + PYOBJ_ALLOC, \ |
| 68 | + } |
| 69 | +#endif |
| 70 | + |
| 71 | +#define _pymem_allocators_debug_INIT \ |
| 72 | + { \ |
| 73 | + {'r', PYRAW_ALLOC}, \ |
| 74 | + {'m', PYMEM_ALLOC}, \ |
| 75 | + {'o', PYOBJ_ALLOC}, \ |
| 76 | + } |
| 77 | + |
| 78 | +# define _pymem_allocators_obj_arena_INIT \ |
| 79 | + { NULL, _PyMem_ArenaAlloc, _PyMem_ArenaFree } |
| 80 | + |
| 81 | + |
| 82 | +#ifdef __cplusplus |
| 83 | +} |
| 84 | +#endif |
| 85 | +#endif // !Py_INTERNAL_PYMEM_INIT_H |
0 commit comments