Skip to content

Commit 734455f

Browse files
use mimalloc for raw allocations
1 parent 6ef2578 commit 734455f

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

Include/internal/pycore_pymem_init.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ extern void* _PyMem_MiMalloc(void *, size_t);
2929
extern void* _PyMem_MiCalloc(void *, size_t, size_t);
3030
extern void _PyMem_MiFree(void *, void *);
3131
extern void* _PyMem_MiRealloc(void *, void *, size_t);
32+
extern void* _PyMem_MiRawMalloc(void *, size_t);
33+
extern void* _PyMem_MiRawCalloc(void *, size_t, size_t);
34+
extern void _PyMem_MiRawFree(void *, void *);
35+
extern void* _PyMem_MiRawRealloc(void *, void *, size_t);
36+
# define PYRAW_ALLOC {NULL, _PyMem_MiRawMalloc, _PyMem_MiRawCalloc, _PyMem_MiRawRealloc, _PyMem_MiRawFree}
3237
# define PYMEM_ALLOC {NULL, _PyMem_MiMalloc, _PyMem_MiCalloc, _PyMem_MiRealloc, _PyMem_MiFree}
3338
#elif defined(WITH_PYMALLOC)
3439
extern void* _PyObject_Malloc(void *, size_t);

Objects/obmalloc.c

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,14 +358,38 @@ _PyObject_MiFree(void *ctx, void *ptr)
358358
mi_free(ptr);
359359
}
360360

361+
void *
362+
_PyMem_MiRawMalloc(void *, size_t size)
363+
{
364+
return mi_malloc(size);
365+
}
366+
367+
void *
368+
_PyMem_MiRawCalloc(void *, size_t nelem, size_t elsize)
369+
{
370+
return mi_calloc(nelem, elsize);
371+
}
372+
373+
void *
374+
_PyMem_MiRawRealloc(void *, void *ptr, size_t size)
375+
{
376+
return mi_realloc(ptr, size);
377+
}
378+
379+
void
380+
_PyMem_MiRawFree(void *, void *ptr)
381+
{
382+
mi_free(ptr);
383+
}
361384
#endif // WITH_MIMALLOC
362385

363386

364387
#define MALLOC_ALLOC {NULL, _PyMem_RawMalloc, _PyMem_RawCalloc, _PyMem_RawRealloc, _PyMem_RawFree}
365388

366389

367390
#ifdef WITH_MIMALLOC
368-
# define MIMALLOC_ALLOC {NULL, _PyMem_MiMalloc, _PyMem_MiCalloc, _PyMem_MiRealloc, _PyMem_MiFree}
391+
# define MIMALLOC_ALLOC {NULL, _PyMem_MiMalloc, _PyMem_MiCalloc, _PyMem_MiRealloc, _PyMem_MiFree}
392+
# define MIMALLOC_RAWALLOC {NULL, _PyMem_MiRawMalloc, _PyMem_MiRawCalloc, _PyMem_MiRawRealloc, _PyMem_MiRawFree}
369393
# define MIMALLOC_OBJALLOC {NULL, _PyObject_MiMalloc, _PyObject_MiCalloc, _PyObject_MiRealloc, _PyObject_MiFree}
370394
#endif
371395

@@ -383,7 +407,7 @@ void* _PyObject_Realloc(void *ctx, void *ptr, size_t size);
383407

384408
#if defined(Py_GIL_DISABLED)
385409
// Py_GIL_DISABLED requires using mimalloc for "mem" and "obj" domains.
386-
# define PYRAW_ALLOC MALLOC_ALLOC
410+
# define PYRAW_ALLOC MIMALLOC_RAWALLOC
387411
# define PYMEM_ALLOC MIMALLOC_ALLOC
388412
# define PYOBJ_ALLOC MIMALLOC_OBJALLOC
389413
#elif defined(WITH_PYMALLOC)
@@ -758,7 +782,7 @@ set_up_allocators_unlocked(PyMemAllocatorName allocator)
758782
case PYMEM_ALLOCATOR_MIMALLOC:
759783
case PYMEM_ALLOCATOR_MIMALLOC_DEBUG:
760784
{
761-
PyMemAllocatorEx malloc_alloc = MALLOC_ALLOC;
785+
PyMemAllocatorEx malloc_alloc = MIMALLOC_RAWALLOC;
762786
set_allocator_unlocked(PYMEM_DOMAIN_RAW, &malloc_alloc);
763787

764788
PyMemAllocatorEx pymalloc = MIMALLOC_ALLOC;

0 commit comments

Comments
 (0)