/* * Copyright (c) 2018-2020, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Kernel { #define SLAB_ALLOC_SCRUB_BYTE 0xab #define SLAB_DEALLOC_SCRUB_BYTE 0xbc void* slab_alloc(size_t slab_size); void slab_dealloc(void*, size_t slab_size); void slab_alloc_init(); void slab_alloc_stats(Function); #define MAKE_SLAB_ALLOCATED(type) \ public: \ [[nodiscard]] void* operator new(size_t) noexcept { return slab_alloc(sizeof(type)); } \ void operator delete(void* ptr) noexcept { slab_dealloc(ptr, sizeof(type)); } \ \ private: }