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-08-11T11:15:16Z
Lists: pgsql-hackers
Em qui., 11 de ago. de 2022 às 07:38, Peter Eisentraut <
peter.eisentraut@enterprisedb.com> escreveu:

> On 01.08.22 19:08, Ranier Vilela wrote:
> > Like how
> >
> https://github.com/postgres/postgres/commit/9fd45870c1436b477264c0c82eb195df52bc0919
> > <
> https://github.com/postgres/postgres/commit/9fd45870c1436b477264c0c82eb195df52bc0919
> >
> > New attempt to remove more MemSet calls, that are safe.
> >
> > Attached v3 patch.
>
> Note that struct initialization does not set padding bits.

According to:
https://interrupt.memfault.com/blog/c-struct-padding-initialization

2. individually set all members to 0:

struct foo a = {
  .i = 0,
  .b = 0,};

Suffer from this problem.

3. use { 0 } zero-initializer, not.

  So any
> struct that is used as a hash key or that goes to disk or something
> similar needs to be set with memset/MemSet instead.  Various places in
> the code make explicit comments about that, which your patch deletes,
> which is a mistake.  This patch needs to be adjusted carefully with this
> in mind before it can be considered.
>
I think this needs better comprovation?

regards,
Ranier Vilela

Commits

  1. Replace many MemSet calls with struct initialization

  2. Change some unnecessary MemSet calls

  3. Avoid unnecessary MemSet call