| #ifndef Py_INTERNAL_PYMEM_H |
| #define Py_INTERNAL_PYMEM_H |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
|
|
| #ifndef Py_BUILD_CORE |
| # error "this header requires Py_BUILD_CORE define" |
| #endif |
|
|
| #include "pymem.h" |
|
|
|
|
| |
| |
| |
| PyAPI_FUNC(int) _PyMem_SetDefaultAllocator( |
| PyMemAllocatorDomain domain, |
| PyMemAllocatorEx *old_alloc); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #define PYMEM_CLEANBYTE 0xCD |
| #define PYMEM_DEADBYTE 0xDD |
| #define PYMEM_FORBIDDENBYTE 0xFD |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| static inline int _PyMem_IsPtrFreed(const void *ptr) |
| { |
| uintptr_t value = (uintptr_t)ptr; |
| #if SIZEOF_VOID_P == 8 |
| return (value == 0 |
| || value == (uintptr_t)0xCDCDCDCDCDCDCDCD |
| || value == (uintptr_t)0xDDDDDDDDDDDDDDDD |
| || value == (uintptr_t)0xFDFDFDFDFDFDFDFD); |
| #elif SIZEOF_VOID_P == 4 |
| return (value == 0 |
| || value == (uintptr_t)0xCDCDCDCD |
| || value == (uintptr_t)0xDDDDDDDD |
| || value == (uintptr_t)0xFDFDFDFD); |
| #else |
| # error "unknown pointer size" |
| #endif |
| } |
|
|
| PyAPI_FUNC(int) _PyMem_GetAllocatorName( |
| const char *name, |
| PyMemAllocatorName *allocator); |
|
|
| |
| |
| |
| PyAPI_FUNC(int) _PyMem_SetupAllocators(PyMemAllocatorName allocator); |
|
|
| struct _PyTraceMalloc_Config { |
| |
| |
| enum { |
| TRACEMALLOC_NOT_INITIALIZED, |
| TRACEMALLOC_INITIALIZED, |
| TRACEMALLOC_FINALIZED |
| } initialized; |
|
|
| |
| |
| int tracing; |
|
|
| |
| |
| int max_nframe; |
| }; |
|
|
| #define _PyTraceMalloc_Config_INIT \ |
| {.initialized = TRACEMALLOC_NOT_INITIALIZED, \ |
| .tracing = 0, \ |
| .max_nframe = 1} |
|
|
| PyAPI_DATA(struct _PyTraceMalloc_Config) _Py_tracemalloc_config; |
|
|
|
|
| #ifdef __cplusplus |
| } |
| #endif |
| #endif |
|
|