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