Here are some macro definitions used in mm_malloc, and mm_free to hide these casts and bit operations:
/** Assume: * bp points to the allocated/free part of a block * p points to a header/footer of a block * */ #define GET(p) (*(size_t *)(p)) #define GET_SIZE(p) (GET(p) & ~0x7) #define GET_ALLOC(p) (GET(p) & 0x1) #define HDRP(bp) ( (char *)(bp) - 4 ) #define FTRP(bp) ( (char *)(bp) + GET_SIZE(HDRP(bp)) - 8 ) #define NEXT_BLKP(bp) ( FTRP(bp) + 8 ) #define PREV_BLKP(bp) ( (char *)(bp) - GET_SIZE(HDRP(bp) - 4) )