mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 00:16:11 +00:00
53 lines
981 B
C
53 lines
981 B
C
#include <stdlib.h>
|
|
|
|
#define nth_bit(x, n) ((x >> n) & 1)
|
|
#define Fn(N, Np1) \
|
|
void* a##N(int x) { return ( nth_bit(x, N) ? a##Np1(x) : a##Np1(x) ); }
|
|
|
|
// This test allocates a lot of heap memory, and every allocation features a
|
|
// different stack trace -- the stack traces are effectively a
|
|
// representation of the number 'i', where each function represents a bit in
|
|
// 'i', and if it's a 1 the first function is called, and if it's a 0 the
|
|
// second function is called.
|
|
|
|
void* a999(int x)
|
|
{
|
|
return malloc(100);
|
|
}
|
|
|
|
Fn(17, 999)
|
|
Fn(16, 17)
|
|
Fn(15, 16)
|
|
Fn(14, 15)
|
|
Fn(13, 14)
|
|
Fn(12, 13)
|
|
Fn(11, 12)
|
|
Fn(10, 11)
|
|
Fn( 9, 10)
|
|
Fn( 8, 9)
|
|
Fn( 7, 8)
|
|
Fn( 6, 7)
|
|
Fn( 5, 6)
|
|
Fn( 4, 5)
|
|
Fn( 3, 4)
|
|
Fn( 2, 3)
|
|
Fn( 1, 2)
|
|
Fn( 0, 1)
|
|
|
|
int main(void)
|
|
{
|
|
int i;
|
|
|
|
// Create a large XTree.
|
|
for (i = 0; i < (1 << 18); i++)
|
|
a0(i);
|
|
|
|
// Do a lot of allocations so it gets dup'd a lot of times.
|
|
for (i = 0; i < 100000; i++) {
|
|
free(a1(234));
|
|
free(a2(111));
|
|
}
|
|
|
|
return 0;
|
|
}
|