summaryrefslogtreecommitdiff
path: root/Include/internal/pycore_obmalloc_init.h
diff options
context:
space:
mode:
authorEric Snow <ericsnowcurrently@gmail.com>2022-11-11 16:30:46 -0700
committerGitHub <noreply@github.com>2022-11-11 16:30:46 -0700
commit67807cfc87135fdce4992d38d2ffe3e44747e73b (patch)
treec6723686f91afa7963e1ac72729a417f2067f7f9 /Include/internal/pycore_obmalloc_init.h
parent55c96e8053689c29ae28a9d2117ae37934eace68 (diff)
downloadcpython-git-67807cfc87135fdce4992d38d2ffe3e44747e73b.tar.gz
gh-81057: Move the Allocators to _PyRuntimeState (gh-99217)
The global allocators were stored in 3 static global variables: _PyMem_Raw, _PyMem, and _PyObject. State for the "small block" allocator was stored in another 13. That makes a total of 16 global variables. We are moving all 16 to the _PyRuntimeState struct as part of the work for gh-81057. (If PEP 684 is accepted then we will follow up by moving them all to PyInterpreterState.) https://github.com/python/cpython/issues/81057
Diffstat (limited to 'Include/internal/pycore_obmalloc_init.h')
-rw-r--r--Include/internal/pycore_obmalloc_init.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/Include/internal/pycore_obmalloc_init.h b/Include/internal/pycore_obmalloc_init.h
new file mode 100644
index 0000000000..c0fb057d06
--- /dev/null
+++ b/Include/internal/pycore_obmalloc_init.h
@@ -0,0 +1,68 @@
+#ifndef Py_INTERNAL_OBMALLOC_INIT_H
+#define Py_INTERNAL_OBMALLOC_INIT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+
+/****************************************************/
+/* the default object allocator's state initializer */
+
+#define PTA(pools, x) \
+ ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
+#define PT(p, x) PTA(p, x), PTA(p, x)
+
+#define PT_8(p, start) \
+ PT(p, start), \
+ PT(p, start+1), \
+ PT(p, start+2), \
+ PT(p, start+3), \
+ PT(p, start+4), \
+ PT(p, start+5), \
+ PT(p, start+6), \
+ PT(p, start+7)
+
+#if NB_SMALL_SIZE_CLASSES <= 8
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0) }
+#elif NB_SMALL_SIZE_CLASSES <= 16
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8) }
+#elif NB_SMALL_SIZE_CLASSES <= 24
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16) }
+#elif NB_SMALL_SIZE_CLASSES <= 32
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
+#elif NB_SMALL_SIZE_CLASSES <= 40
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32) }
+#elif NB_SMALL_SIZE_CLASSES <= 48
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40) }
+#elif NB_SMALL_SIZE_CLASSES <= 56
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48) }
+#elif NB_SMALL_SIZE_CLASSES <= 64
+# define _obmalloc_pools_INIT(p) \
+ { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24), PT_8(p, 32), PT_8(p, 40), PT_8(p, 48), PT_8(p, 56) }
+#else
+# error "NB_SMALL_SIZE_CLASSES should be less than 64"
+#endif
+
+#define _obmalloc_state_INIT(obmalloc) \
+ { \
+ .pools = { \
+ .used = _obmalloc_pools_INIT(obmalloc.pools), \
+ }, \
+ }
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif // !Py_INTERNAL_OBMALLOC_INIT_H