Re: Avoid unecessary MemSet call (src/backend/utils/cache/relcache.c)

Ranier Vilela <ranier.vf@gmail.com>

From: Ranier Vilela <ranier.vf@gmail.com>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: Justin Pryzby <pryzby@telsasoft.com>, David Rowley <dgrowleyml@gmail.com>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2022-05-18T14:08:08Z
Lists: pgsql-hackers
Em qua., 18 de mai. de 2022 às 10:52, Peter Eisentraut <
peter.eisentraut@enterprisedb.com> escreveu:

> On 18.05.22 01:18, Justin Pryzby wrote:
> > Take the first one as an example.  It says:
> >
> >          GenericCosts costs;
> >          MemSet(&costs, 0, sizeof(costs));
> >
> > You sent a patch to change it to sizeof(GenericCosts).
> >
> > But it's not a pointer, so they are the same.
>
> This instance can more easily be written as
>
>      costs = {0};
>
That would initialize the content at compilation and not at runtime,
correct?
And we would avoid MemSet/memset altogether.

There are a lot of cases using MemSet (with struct variables) and at
Windows 64 bits, long are 4 (four) bytes.
So I believe that MemSet is less efficient on Windows than on Linux.
"The size of the '_vstart' buffer is not a multiple of the element size of
the type 'long'."
message from PVS-Studio static analysis tool.

regards,
Ranier Vilela

Commits

  1. Replace many MemSet calls with struct initialization

  2. Change some unnecessary MemSet calls

  3. Avoid unnecessary MemSet call