/* Example code for Think OS. Copyright 2015 Allen Downey License: Creative Commons Attribution-ShareAlike 3.0 */ #define PRINT_DISTANCE(a, b) printf("Distance between " #a " and " #b ": %ld\n", (void *) (a) - (void *) (b)) #include #include #include #include #include #include int global; int another_global; int main() { char malloc_trace_path[4096]; getcwd(malloc_trace_path, 4096); strcat(malloc_trace_path, "/malloc_trace.txt"); setenv("MALLOC_TRACE", malloc_trace_path, 0); mtrace(); int local = 5; int another_local = 7; void *p = malloc(128); void *another_p = malloc((1 << 18)); printf("Address of main is %p\n", main); printf("Address of global is %p\n", &global); printf("Address of local is %p\n", &local); printf("Address of another_local is %p\n", &another_local); printf("Address of p is %p\n", p); printf("Address of another_p is %p\n\n", another_p); PRINT_DISTANCE(&global, &main); PRINT_DISTANCE(&global, &another_global); PRINT_DISTANCE(&local, &another_local); PRINT_DISTANCE(p, another_p); malloc_stats(); FILE *minfo = fopen("malloc_info.xml", "w"); malloc_info(0, minfo); fclose(minfo); return 0; }