mimalloc-override.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* ----------------------------------------------------------------------------
  2. Copyright (c) 2018-2020 Microsoft Research, Daan Leijen
  3. This is free software; you can redistribute it and/or modify it under the
  4. terms of the MIT license. A copy of the license can be found in the file
  5. "LICENSE" at the root of this distribution.
  6. -----------------------------------------------------------------------------*/
  7. #pragma once
  8. #ifndef MIMALLOC_OVERRIDE_H
  9. #define MIMALLOC_OVERRIDE_H
  10. /* ----------------------------------------------------------------------------
  11. This header can be used to statically redirect malloc/free and new/delete
  12. to the mimalloc variants. This can be useful if one can include this file on
  13. each source file in a project (but be careful when using external code to
  14. not accidentally mix pointers from different allocators).
  15. -----------------------------------------------------------------------------*/
  16. #include <mimalloc.h>
  17. // Standard C allocation
  18. #define malloc(n) mi_malloc(n)
  19. #define calloc(n,c) mi_calloc(n,c)
  20. #define realloc(p,n) mi_realloc(p,n)
  21. #define free(p) mi_free(p)
  22. #define strdup(s) mi_strdup(s)
  23. #define strndup(s,n) mi_strndup(s,n)
  24. #define realpath(f,n) mi_realpath(f,n)
  25. // Microsoft extensions
  26. #define _expand(p,n) mi_expand(p,n)
  27. #define _msize(p) mi_usable_size(p)
  28. #define _recalloc(p,n,c) mi_recalloc(p,n,c)
  29. #define _strdup(s) mi_strdup(s)
  30. #define _strndup(s,n) mi_strndup(s,n)
  31. #define _wcsdup(s) (wchar_t*)mi_wcsdup((const unsigned short*)(s))
  32. #define _mbsdup(s) mi_mbsdup(s)
  33. #define _dupenv_s(b,n,v) mi_dupenv_s(b,n,v)
  34. #define _wdupenv_s(b,n,v) mi_wdupenv_s((unsigned short*)(b),n,(const unsigned short*)(v))
  35. // Various Posix and Unix variants
  36. #define reallocf(p,n) mi_reallocf(p,n)
  37. #define malloc_size(p) mi_usable_size(p)
  38. #define malloc_usable_size(p) mi_usable_size(p)
  39. #define malloc_good_size(sz) mi_malloc_good_size(sz)
  40. #define cfree(p) mi_free(p)
  41. #define valloc(n) mi_valloc(n)
  42. #define pvalloc(n) mi_pvalloc(n)
  43. #define reallocarray(p,s,n) mi_reallocarray(p,s,n)
  44. #define reallocarr(p,s,n) mi_reallocarr(p,s,n)
  45. #define memalign(a,n) mi_memalign(a,n)
  46. #define aligned_alloc(a,n) mi_aligned_alloc(a,n)
  47. #define posix_memalign(p,a,n) mi_posix_memalign(p,a,n)
  48. #define _posix_memalign(p,a,n) mi_posix_memalign(p,a,n)
  49. // Microsoft aligned variants
  50. #define _aligned_malloc(n,a) mi_malloc_aligned(n,a)
  51. #define _aligned_realloc(p,n,a) mi_realloc_aligned(p,n,a)
  52. #define _aligned_recalloc(p,s,n,a) mi_aligned_recalloc(p,s,n,a)
  53. #define _aligned_msize(p,a,o) mi_usable_size(p)
  54. #define _aligned_free(p) mi_free(p)
  55. #define _aligned_offset_malloc(n,a,o) mi_malloc_aligned_at(n,a,o)
  56. #define _aligned_offset_realloc(p,n,a,o) mi_realloc_aligned_at(p,n,a,o)
  57. #define _aligned_offset_recalloc(p,s,n,a,o) mi_recalloc_aligned_at(p,s,n,a,o)
  58. #endif // MIMALLOC_OVERRIDE_H