aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/tests/malloc-test.c
diff options
context:
space:
mode:
Diffstat (limited to 'externals/gridflow/tests/malloc-test.c')
-rw-r--r--externals/gridflow/tests/malloc-test.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/externals/gridflow/tests/malloc-test.c b/externals/gridflow/tests/malloc-test.c
new file mode 100644
index 00000000..d5445dcc
--- /dev/null
+++ b/externals/gridflow/tests/malloc-test.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <time.h>
+#include <sys/time.h>
+#include <stdio.h>
+
+typedef long long uint64;
+
+uint64 gf_timeofday () {
+ timeval t;
+ gettimeofday(&t,0);
+ return t.tv_sec*1000000+t.tv_usec;
+}
+static void test1 (size_t n) {
+ uint64 t = gf_timeofday();
+ for (int i=0; i<10000; i++) free(malloc(n));
+ t = gf_timeofday() - t;
+ printf("10000 mallocs of %7ld bytes takes %7ld us (%f us/malloc)\n",n,(long)t,t/(float)10000);
+}
+static void test2 (size_t n) {
+ uint64 t = gf_timeofday();
+ // the real calloc is lazy, let's try a manual (strict) calloc
+ //for (int i=0; i<10000; i++) free(calloc(1,n));
+ for (int i=0; i<10000; i++) {
+ long *p = (long *)malloc(n);
+ size_t nn=n/sizeof(long);
+ for (size_t j=0; j<nn; j++) p[j] = 0;
+ free(p);
+ }
+ t = gf_timeofday() - t;
+ printf("10000 callocs of %7ld bytes takes %7ld us (%f us/calloc)\n",n,(long)t,t/(float)10000);
+}
+int main () {
+ for (int i=0; i<20; i++) {test1(4<<i); test2(4<<i);}
+ //for (int i=0; i<20; i++) test1(4096*(32+i));
+ return 0;
+}