From 59bf88cb6bd8f803656d46025b1847d7a99033dc Mon Sep 17 00:00:00 2001 From: Mia Herkt Date: Wed, 7 Dec 2022 21:44:06 +0100 Subject: [PATCH] 07: C: Reduce malloc calls --- 07/solution.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/07/solution.c b/07/solution.c index 3a11d22..2adade7 100644 --- a/07/solution.c +++ b/07/solution.c @@ -6,8 +6,9 @@ typedef struct entry { char *name; int isdir; size_t size; - struct entry **entries; size_t n_entries; + size_t n_alloc; + struct entry **entries; struct entry *parent; } entry; @@ -22,10 +23,14 @@ entry *findent(entry *e, int isdir, const char *name) { } entry *addent(entry *parent, int isdir, const char *name) { - if (parent->n_entries) - parent->entries = realloc(parent->entries, ++(parent->n_entries) * sizeof(entry*)); - else - parent->entries = malloc(++(parent->n_entries) * sizeof(entry*)); + if (parent->n_entries >= parent->n_alloc) { + parent->n_alloc += 10; + if (parent->n_entries) + parent->entries = realloc(parent->entries, parent->n_alloc * sizeof(entry*)); + else + parent->entries = malloc(parent->n_alloc * sizeof(entry*)); + } + parent->n_entries++; entry *e = parent->entries[parent->n_entries - 1] = calloc(1, sizeof(entry)); e->isdir = isdir;