/*
* jemalloc tester (l)2010, Pavlinux Inc.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <jemalloc/jemalloc.h>
#include <unistd.h>
#include <time.h>#define TOTAL 0x32
#define SZ 0xFFFF
struct timespec diff(struct timespec start, struct timespec end)
{
struct timespec temp;
if ((end.tv_nsec - start.tv_nsec) < 0) {
temp.tv_sec = end.tv_sec - start.tv_sec - 1;
temp.tv_nsec = 1000000000 + end.tv_nsec - start.tv_nsec;
} else {
temp.tv_sec = end.tv_sec - start.tv_sec;
temp.tv_nsec = end.tv_nsec - start.tv_nsec;
}
return temp;
}
int main(void)
{
int a, i; /*counters */
float summ = 0.0000000001f; /* no divide to zero ;) */
int **ARRAY; /* ptr to ptrs */
struct timespec time1, time2; /* timers */
for (a = 0; a < TOTAL; a++) {
clock_gettime(CLOCK_REALTIME, &time1); /* begin time */
posix_memalign((void *) & ARRAY, sysconf(_SC_PAGESIZE), SZ * sizeof(void *));
for (i = 0; i < SZ; i++) {
if (!(i % 5)) {
ARRAY[i] = (int *) malloc(i);
*ARRAY[i] = i;
continue;
}
if (!(i % 3)) {
ARRAY[i] = (int *) calloc(1, i);
*ARRAY[i] = i;
continue;
}
if (!(i % 2)) {
posix_memalign((void *) & ARRAY[i], sysconf(_SC_PAGESIZE), sizeof(void *));
*ARRAY[i] = i;
continue;
}
ARRAY[i] = (int *) malloc(i);
*ARRAY[i] = i;
}
for (i = 0; i < SZ; i++) {
free(ARRAY[i]);
ARRAY[i] = NULL;
}
free(*ARRAY), ARRAY = NULL;
clock_gettime(CLOCK_REALTIME, &time2); /* end time */
printf("Count: [%.2d] Time: %.2zd.%.9zd sec\n", a, diff(time1, time2).tv_sec, diff(time1, time2).tv_nsec);
/* summary */
summ += (float)(diff(time1, time2).tv_sec) + ((float)diff(time1, time2).tv_nsec/1000000000.0f);
}
/* total aand average */
printf("\nTotal: [%.9f]\nAverage: [%.9f]\n\n",summ, summ/TOTAL);
return 0;
}