#include <stdio.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_LIBC_H
#include <libc.h>
#endif
main(argc, argv)
int argc;
char **argv;
{
int i, d, min;
char *p, *q;
int terse;
int total = 12, negative = 0, min_index = 0;
terse = argc > 1 && !strcmp(argv[1], "--terse");
i = 0x8000;
min = i;
d = i;
do {
p = malloc(i);
q = malloc(i);
total++;
d = q - (p+i);
if (d <= min) {
if (d < 0) {
negative++;
if (negative*3 > total*2) {
fprintf(
stderr,
"Malloc returns does not return increasing addresses\n"
);
if (terse)
printf("0");
exit(1);
}
continue;
}
if (d == min)
break;
min = d;
min_index = i;
if (d == 0)
break;
}
i -= sizeof(char *);
} while (i >= 0x7f00);
d = 0x8000 - min_index;
if (d > 0x100 || min > 0x1000) {
fprintf(stderr, "no credible value for EXTERN_MALLOC_OVERHEAD found\n");
if (terse)
printf("0");
fflush(stdout);
exit(1);
}
printf(terse ? "%d" : "Suggested EXTERN_MALLOC_OVERHEAD: %d\n", d);
if (!terse && d != min)
printf("Actual overhead encountered for the above setting:\n", min);
}