SlabAllocator.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <AK/Types.h>
  9. namespace Kernel {
  10. #define SLAB_ALLOC_SCRUB_BYTE 0xab
  11. #define SLAB_DEALLOC_SCRUB_BYTE 0xbc
  12. void* slab_alloc(size_t slab_size);
  13. void slab_dealloc(void*, size_t slab_size);
  14. void slab_alloc_init();
  15. void slab_alloc_stats(Function<void(size_t slab_size, size_t allocated, size_t free)>);
  16. #define MAKE_SLAB_ALLOCATED(type) \
  17. public: \
  18. [[nodiscard]] void* operator new(size_t) \
  19. { \
  20. void* ptr = slab_alloc(sizeof(type)); \
  21. VERIFY(ptr); \
  22. return ptr; \
  23. } \
  24. [[nodiscard]] void* operator new(size_t, const std::nothrow_t&) noexcept \
  25. { \
  26. return slab_alloc(sizeof(type)); \
  27. } \
  28. void operator delete(void* ptr) noexcept \
  29. { \
  30. if (!ptr) \
  31. return; \
  32. slab_dealloc(ptr, sizeof(type)); \
  33. } \
  34. \
  35. private:
  36. }