slab.hpp 578 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #pragma once
  2. #include <cstddef>
  3. #include <type_traits>
  4. #include <stdint.h>
  5. namespace kernel::mem {
  6. struct slab_cache;
  7. struct slab_head {
  8. slab_cache* cache;
  9. slab_head* next;
  10. slab_head* prev;
  11. void* free;
  12. unsigned int free_count;
  13. unsigned int obj_size;
  14. };
  15. struct slab_cache {
  16. slab_head* slabs_empty;
  17. slab_head* slabs_partial;
  18. slab_head* slabs_full;
  19. std::size_t obj_size;
  20. };
  21. void init_slab_cache(slab_cache* cache, std::size_t obj_size);
  22. void* slab_alloc(slab_cache* cache);
  23. void slab_free(void* ptr);
  24. } // namespace kernel::mem