kmalloc.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, Daniel Bertalan <dani@danielbertalan.dev>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #if defined(__serenity__) && !defined(KERNEL)
  8. # include <AK/Assertions.h>
  9. # include <AK/kmalloc.h>
  10. // However deceptively simple these functions look, they must not be inlined.
  11. // Memory allocated in one translation unit has to be deallocatable in another
  12. // translation unit, so these functions must be the same everywhere.
  13. // By making these functions global, this invariant is enforced.
  14. void* operator new(size_t size)
  15. {
  16. void* ptr = malloc(size);
  17. VERIFY(ptr);
  18. return ptr;
  19. }
  20. void* operator new(size_t size, const std::nothrow_t&) noexcept
  21. {
  22. return malloc(size);
  23. }
  24. void operator delete(void* ptr) noexcept
  25. {
  26. return free(ptr);
  27. }
  28. void operator delete(void* ptr, size_t) noexcept
  29. {
  30. return free(ptr);
  31. }
  32. void* operator new[](size_t size)
  33. {
  34. void* ptr = malloc(size);
  35. VERIFY(ptr);
  36. return ptr;
  37. }
  38. void* operator new[](size_t size, const std::nothrow_t&) noexcept
  39. {
  40. return malloc(size);
  41. }
  42. void operator delete[](void* ptr) noexcept
  43. {
  44. return free(ptr);
  45. }
  46. void operator delete[](void* ptr, size_t) noexcept
  47. {
  48. return free(ptr);
  49. }
  50. #endif