malloc bench fix (use fixed array size)
authornsz <nsz@port70.net>
Thu, 4 Aug 2011 21:40:48 +0000 (23:40 +0200)
committernsz <nsz@port70.net>
Thu, 4 Aug 2011 21:40:48 +0000 (23:40 +0200)
Makefile.inc
src/malloc/bench.c

index 5f1d614..ff5b5ff 100644 (file)
@@ -20,7 +20,7 @@ AR=ar
 RANLIB=ranlib
 
 CFLAGS += -g -std=c99 -pipe -Wall
-LDFLAGS += -g
+LDFLAGS += -g -lpthread
 INC += -I$(ROOTDIR)/common
 
 ifeq ($(usemusl), yes)
index 3cc33d2..030e5ee 100644 (file)
@@ -4,72 +4,92 @@
 #include <pthread.h>
 #include "test.h"
 
+enum { Len = 1000 };
+
 void bench_malloc_sparse(int N) {
-       void *p[N];
-       size_t i;
-       for (i=0; i<sizeof p/sizeof *p; i++) {
-               p[i] = malloc(4000);
-               memset(p[i], 0, 4000);
+       void *p[Len];
+       int i,j;
+
+       for (j = 0; j < N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc(4000);
+                       memset(p[i], 0, 4000);
+               }
+               for (i=0; i<sizeof p/sizeof *p; i++)
+                       if (i%150) free(p[i]);
+               for (i=0; i<sizeof p/sizeof *p; i+=150)
+                       free(p[i]);
        }
-       for (i=0; i<sizeof p/sizeof *p; i++)
-               if (i%150) free(p[i]);
 }
 
 void bench_malloc_bubble(int N) {
-       void *p[N];
-       size_t i;
-       for (i=0; i<sizeof p/sizeof *p; i++) {
-               p[i] = malloc(4000);
-               memset(p[i], 0, 4000);
+       void *p[Len];
+       int i,j;
+
+       for (j = 0; j < N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc(4000);
+                       memset(p[i], 0, 4000);
+               }
+               for (i=0; i<sizeof p/sizeof *p; i++)
+                       free(p[i]);
        }
-       for (i=0; i<sizeof p/sizeof *p-1; i++)
-               free(p[i]);
 }
 
 void bench_malloc_tiny1(int N) {
-       void **p = malloc(N * sizeof *p);
-       size_t i;
-       for (i=0; i<N; i++) {
-               p[i] = malloc((i%4+1)*16);
-       }
-       for (i=0; i<N; i++) {
-               free(p[i]);
+       void *p[Len];
+       int i,j;
+
+       for (j=0; j<N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc((i%4+1)*16);
+               }
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       free(p[i]);
+               }
        }
-       free(p);
 }
 
 void bench_malloc_tiny2(int N) {
-       void **p = malloc(N * sizeof *p);
-       size_t i;
-       for (i=0; i<N; i++) {
-               p[i] = malloc((i%4+1)*16);
+       void *p[Len];
+       int i,j;
+
+       for (j=0; j<N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc((i%4+1)*16);
+               }
+               for (i=1; i; i = (i+57)%(sizeof p/sizeof *p))
+                       free(p[i]);
+               free(p[0]);
        }
-       if (N>1) for (i=1; i; i = (i+1999)%N)
-               free(p[i]);
-       free(p[0]);
-       free(p);
 }
 
 void bench_malloc_big1(int N) {
-       void *p[N];
-       size_t i;
-       for (i=0; i<sizeof p/sizeof *p; i++) {
-               p[i] = malloc((i%4+1)*16384);
-       }
-       for (i=0; i<sizeof p/sizeof *p; i++) {
-               free(p[i]);
+       void *p[Len];
+       int i,j;
+
+       for (j = 0;  j < N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc((i%4+1)*16384);
+               }
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       free(p[i]);
+               }
        }
 }
 
 void bench_malloc_big2(int N) {
-       void *p[N];
-       size_t i;
-       for (i=0; i<sizeof p/sizeof *p; i++) {
-               p[i] = malloc((i%4+1)*16384);
+       void *p[Len];
+       int i,j;
+
+       for (j = 0; j < N; j++) {
+               for (i=0; i<sizeof p/sizeof *p; i++) {
+                       p[i] = malloc((i%4+1)*16384);
+               }
+               for (i=1; i; i = (i+57)%(sizeof p/sizeof *p))
+                       free(p[i]);
+               free(p[0]);
        }
-       if (N>1) for (i=1; i; i = (i+1999)%(sizeof p/sizeof *p))
-               free(p[i]);
-       free(p[0]);
 }