From f368efaaf01de2914487b091c099b54b6f2483bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Mon, 17 Aug 2009 07:38:15 -0400 Subject: [PATCH] Add a cache for TreeDataList allocation --- footreedatalist.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/footreedatalist.c b/footreedatalist.c index be169ba0..21e48749 100644 --- a/footreedatalist.c +++ b/footreedatalist.c @@ -23,15 +23,35 @@ #include "footreedatalist.h" #include +static FooTreeDataList *cache; + /* node allocation */ +#define N_DATA_LISTS (64) + FooTreeDataList * _foo_tree_data_list_alloc (void) { FooTreeDataList *list; - list = g_slice_new0 (FooTreeDataList); + if (!cache) + { + int i; + list = g_malloc (N_DATA_LISTS * sizeof (FooTreeDataList)); + + for (i = 0; i < N_DATA_LISTS; ++i) + { + list[i].next = cache; + cache = &(list[i]); + } + } + + list = cache; + cache = cache->next; + + memset (list, 0, sizeof (FooTreeDataList)); + return list; } @@ -54,7 +74,9 @@ _foo_tree_data_list_free (FooTreeDataList *list, else if (g_type_is_a (column_headers [i], G_TYPE_BOXED) && tmp->data.v_pointer != NULL) g_boxed_free (column_headers [i], (gpointer) tmp->data.v_pointer); - g_slice_free (FooTreeDataList, tmp); + tmp->next = cache; + cache = tmp; + i++; tmp = next; }