#include #define __STDC_LIMIT_MACROS #include #include #define ALIGN_BITS (sizeof (void *) >> __UINT64_C (1)) #define BIT_BITS __UINT64_C (3) #define BYTE_BITS __UINT64_C (14) #define SLOT_BITS (sizeof (void *) * 8) - (ALIGN_BITS + BIT_BITS + BYTE_BITS) #define BYTES_PER_SLOT __UINT64_C (1) << BYTE_BITS #define TRACKING_SLOTS 8192 int check_new (uintptr_t p) { ptrdiff_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS)); ptrdiff_t byte = ( p >> (ALIGN_BITS + BIT_BITS)) & __UINT64_C (0x00003fff); ptrdiff_t bit = ( p >> ALIGN_BITS) & __UINT64_C (0x00000007); ptrdiff_t nop = p & __UINT64_C (0x3 ); printf ("address: %p slot: %p byte: %4x bit: %4x nop:%x\n", p, slot, byte, bit, nop); return 1; } /* check_new */ int main (int argc, char *argv[]) { uintptr_t p; for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) check_new (p); return (1); } /* main */