X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftal%2Fbenchmark%2Fsamba-allocs.c;h=e25c7e9b69163996c96ad22081307ad24b729355;hp=853b1fb207b6d471742e4710d91756c0cbb25185;hb=3710d28925e2960e1ee164df3b4ce920f0b27319;hpb=dfaf896adb74ddf7271c9eee7330f2e3e009345b diff --git a/ccan/tal/benchmark/samba-allocs.c b/ccan/tal/benchmark/samba-allocs.c index 853b1fb2..e25c7e9b 100644 --- a/ccan/tal/benchmark/samba-allocs.c +++ b/ccan/tal/benchmark/samba-allocs.c @@ -141,8 +141,14 @@ static int unused_talloc_destructor(void *p) static void do_tallocs(struct node *node) { unsigned int i; - - node->n = talloc_size(node->parent ? node->parent->n : NULL, node->len); + static int count; + + if (count++ % 16 == 0) + node->n = talloc_array(node->parent ? node->parent->n : NULL, + char, node->len); + else + node->n = talloc_size(node->parent ? node->parent->n : NULL, + node->len); if (node->destructor) talloc_set_destructor(node->n, unused_talloc_destructor); if (node->name) @@ -169,9 +175,18 @@ static void unused_tal_destructor(void *p) static void do_tals(struct node *node) { unsigned int i; + static int count; + + /* Tal pays a penalty for arrays, but we can't tell which is an array + * and which isn't. Grepping samba source gives 1221 talloc_array of + * 33137 talloc occurrences, so conservatively assume 1 in 16 */ + if (count++ % 16 == 0) + node->n = tal_arr(node->parent ? node->parent->n : NULL, + char, node->len); + else + node->n = tal_alloc_(node->parent ? node->parent->n : NULL, + node->len, false, TAL_LABEL(type, "")); - node->n = tal_arr(node->parent ? node->parent->n : NULL, - char, node->len); if (node->destructor) tal_add_destructor(node->n, unused_tal_destructor); if (node->name)