summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
dfaf896)
Since we added the length property, this penalizes us with an extra
alloc. Unfortunately, we can't tell from the talloc.dump which are
array tallocs and which are single tallocs, but grepping the sources
gives a rate of 1 in 27.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
static void do_tallocs(struct node *node)
{
unsigned int i;
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)
if (node->destructor)
talloc_set_destructor(node->n, unused_talloc_destructor);
if (node->name)
static void do_tals(struct node *node)
{
unsigned int i;
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)
if (node->destructor)
tal_add_destructor(node->n, unused_tal_destructor);
if (node->name)