malloc_impl.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef MALLOC_IMPL_H
  2. #define MALLOC_IMPL_H
  3. #include <sys/mman.h>
  4. #include "dynlink.h"
  5. hidden void *__expand_heap(size_t *);
  6. hidden void *__memalign(size_t, size_t);
  7. struct chunk {
  8. size_t psize, csize;
  9. struct chunk *next, *prev;
  10. };
  11. struct bin {
  12. volatile int lock[2];
  13. struct chunk *head;
  14. struct chunk *tail;
  15. };
  16. #define SIZE_ALIGN (4*sizeof(size_t))
  17. #define SIZE_MASK (-SIZE_ALIGN)
  18. #define OVERHEAD (2*sizeof(size_t))
  19. #define MMAP_THRESHOLD (0x1c00*SIZE_ALIGN)
  20. #define DONTCARE 16
  21. #define RECLAIM 163840
  22. #define CHUNK_SIZE(c) ((c)->csize & -2)
  23. #define CHUNK_PSIZE(c) ((c)->psize & -2)
  24. #define PREV_CHUNK(c) ((struct chunk *)((char *)(c) - CHUNK_PSIZE(c)))
  25. #define NEXT_CHUNK(c) ((struct chunk *)((char *)(c) + CHUNK_SIZE(c)))
  26. #define MEM_TO_CHUNK(p) (struct chunk *)((char *)(p) - OVERHEAD)
  27. #define CHUNK_TO_MEM(c) (void *)((char *)(c) + OVERHEAD)
  28. #define BIN_TO_CHUNK(i) (MEM_TO_CHUNK(&mal.bins[i].head))
  29. #define C_INUSE ((size_t)1)
  30. #define IS_MMAPPED(c) !((c)->csize & (C_INUSE))
  31. hidden void __bin_chunk(struct chunk *);
  32. #endif