#include #define ALIGN_BITS (sizeof (void *) >> 1LL) #define BIT_BITS 3LL #define BYTE_BITS 14LL #define SLOT_BITS (sizeof (void *) * 8) - (ALIGN_BITS + BIT_BITS + BYTE_BITS) #define BYTES_PER_SLOT 1LL << BYTE_BITS #define TRACKING_SLOTS 8192 typedef unsigned long long ull_t; typedef unsigned char *ull_p; int check_new (ull_p p) { ull_t slot = ((ull_t)p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS)); ull_t byte = ((ull_t)p >> (ALIGN_BITS + BIT_BITS)) & 0x00003fffLL; ull_t bit = ((ull_t)p >> ALIGN_BITS) & 0x00000007LL; ull_t nop = (ull_t)p & 0x3LL; printf ("address: %012p slot: %012p byte: %4llx bit: %4llx nop: %llx\n", p, (ull_p)slot, byte, bit, nop); return (1); } /* check_new */ int main (int argc, char *argv[]) { ull_p p; for (p = (ull_p)123456ULL; p < (ull_p)(1ULL << 34); p += (1ULL << 29)) check_new (p); } /* main */