globalAllocator.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "globalAllocator.h"
  2. #include <malloc.h>
  3. #include <pikaAllocator/freeListAllocator.h>
  4. #include <fstream>
  5. void *DefaultAllocator(size_t size)
  6. {
  7. return malloc(size);
  8. }
  9. void DefaultFree(void *ptr)
  10. {
  11. free(ptr);
  12. }
  13. void *DisabeledAllocator(size_t size)
  14. {
  15. return 0;
  16. }
  17. void DisabeledFree(void *ptr)
  18. {
  19. (void)ptr;
  20. }
  21. pika::memory::FreeListAllocator *currentCustomAllocator = {};
  22. void *CustomAllocator(size_t size)
  23. {
  24. return currentCustomAllocator->allocate(size);
  25. }
  26. void CustomFree(void *ptr)
  27. {
  28. currentCustomAllocator->free(ptr);
  29. }
  30. void* (*GlobalAllocateFunction)(size_t) = DefaultAllocator;
  31. void (*GlobalFree)(void *) = DefaultFree;
  32. namespace pika
  33. {
  34. namespace memory
  35. {
  36. void setGlobalAllocatorToStandard()
  37. {
  38. GlobalAllocateFunction = DefaultAllocator;
  39. GlobalFree = DefaultFree;
  40. }
  41. void dissableAllocators()
  42. {
  43. GlobalAllocateFunction = DisabeledAllocator;
  44. GlobalFree = DisabeledFree;
  45. }
  46. void setGlobalAllocator(pika::memory::FreeListAllocator *allocator)
  47. {
  48. currentCustomAllocator = allocator;
  49. GlobalAllocateFunction = CustomAllocator;
  50. GlobalFree = CustomFree;
  51. }
  52. }
  53. }
  54. void *operator new (size_t count)
  55. {
  56. return GlobalAllocateFunction(count);
  57. }
  58. void *operator new[](size_t count)
  59. {
  60. return GlobalAllocateFunction(count);
  61. }
  62. void operator delete (void *ptr)
  63. {
  64. GlobalFree(ptr);
  65. }
  66. void operator delete[](void *ptr)
  67. {
  68. GlobalFree(ptr);
  69. }