git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] add macro REALLOCARRAY

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 15, 2014, 18:24 UTC
Message-ID
<xmqqtx487nej.fsf@gitster.dls.corp.google.com>
In-Reply-To
<5415C89C.4090509@web.de>
René Scharfe <l.s.r@web.de> writes:
Show 14 quoted lines
> The macro ALLOC_GROW manages several aspects of dynamic memory
> allocations for arrays: It performs overprovisioning in order to avoid
> reallocations in future calls, updates the allocation size variable,
> multiplies the item size and thus allows users to simply specify the
> item count, performs the reallocation and updates the array pointer.
>
> Sometimes this is too much.  Add the macro REALLOCARRAY, which only
> takes care of the latter three points and allows users to specify the
> number of items an array can store directly.  It can increase and
> also decrease its size.  Using this macro avoids duplicating the
> array pointer name and takes care of item sizes automatically.
>
> Signed-off-by: Rene Scharfe <l.s.r@web.de>
> ---
Makes sense.  Originally I had two minor gripes against this
 #1 a macro that modifies its arguments feels a bit too magical, and
    we would not want to overuse them.
 #2 REALLOC_ARRAY(array, size) would have been easier to read.

But #1 is shared with ALLOC_GROW(), and as long as we use it everywhere (and by the looks of 2/2 we fairly widely do), readers will get used to the pattern. #2 still stands, though.

Thanks.
Show 28 quoted lines
>  Documentation/technical/api-allocation-growing.txt | 3 +++
>  git-compat-util.h                                  | 2 ++
>  2 files changed, 5 insertions(+)
>
> diff --git a/Documentation/technical/api-allocation-growing.txt b/Documentation/technical/api-allocation-growing.txt
> index 542946b..4b5f049 100644
> --- a/Documentation/technical/api-allocation-growing.txt
> +++ b/Documentation/technical/api-allocation-growing.txt
> @@ -34,3 +34,6 @@ item[nr++] = value you like;
>  ------------
>  
>  You are responsible for updating the `nr` variable.
> +
> +If you need to specify the number of elements to allocate explicitly
> +then use the macro `REALLOCARRAY(item, alloc)` instead of `ALLOC_GROW`.
> diff --git a/git-compat-util.h b/git-compat-util.h
> index 4e7e3f8..d926e4c 100644
> --- a/git-compat-util.h
> +++ b/git-compat-util.h
> @@ -626,6 +626,8 @@ extern int odb_mkstemp(char *template, size_t limit, const char *pattern);
>  extern int odb_pack_keep(char *name, size_t namesz, const unsigned char *sha1);
>  extern char *xgetcwd(void);
>  
> +#define REALLOCARRAY(x, alloc) x = xrealloc((x), (alloc) * sizeof(*(x)))
> +
>  static inline size_t xsize_t(off_t len)
>  {
>  	if (len > (size_t) len)
Previous: René ScharfeNext: Jeff King
Message 3 of 14 in “add macro REALLOCARRAY”
  1. 1/2 add macro REALLOCARRAYRené Scharfe, Sep 14, 2014
  2. 2/2 use REALLOCARRAY for changing the allocation size of arraysRené Scharfe, Sep 14, 2014
  3. Junio C HamanoSep 15, 2014
  4. Jeff KingSep 17, 2014
  5. Junio C HamanoSep 16, 2014
  6. René ScharfeSep 16, 2014
  7. 1/2 add macro REALLOC_ARRAYRené Scharfe, Sep 16, 2014
  8. Michael HaggertySep 24, 2014
  9. Junio C HamanoSep 24, 2014
  10. René ScharfeSep 24, 2014
  11. 2/2 use REALLOC_ARRAY for changing the allocation size of arraysRené Scharfe, Sep 16, 2014
  12. Jonathan NiederSep 24, 2014
  13. René ScharfeSep 24, 2014
  14. Junio C HamanoSep 16, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.