From: | Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> |
---|---|
To: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
Cc: | Bertrand Drouvot <bertranddrouvot(dot)pg(at)gmail(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: define pg_structiszero(addr, s, r) |
Date: | 2024-10-28 15:02:48 |
Message-ID: | CAEudQAq_D5edSnAy2y0Viuk9Y53LTR=FOu8240SSDWmSm_ToAA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Em seg., 28 de out. de 2024 às 11:33, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
escreveu:
> On 18/09/2024 21:57, Bertrand Drouvot wrote:
> > On Wed, Sep 18, 2024 at 10:03:21AM +0200, Peter Eisentraut wrote:
> >> On 18.09.24 06:16, Bertrand Drouvot wrote:
> >>> +#define pg_structiszero(addr, s, r)
> \
> >>> + do {
> \
> >>> + /* We assume this initializes to zeroes */
> \
> >>> + static const s all_zeroes;
> \
> >>> + r = (memcmp(addr, &all_zeroes, sizeof(all_zeroes)) == 0);
> \
> >>> + } while (0)
>
> Not new with this patch, but do we guarantee padding bytes to be zeros?
>
> How about this instead:
>
> static inline bool
> pg_is_all_zeros(const char *p, size_t len)
> {
> for (size_t i = 0; i < len; i++)
> {
> if (p[i] != 0)
> return false;
> }
> return true;
> }
>
> It seems to me that this way is more optimized.
static inline bool
is_all_zeros(const char *p, size_t len)
{
for (size_t i = len; i >= 0; i--)
{
if (p[i] != 0)
return false;
}
return true;
}
main:
sub rsp, 24
lea rdx, [rsp + 12]
lea rcx, [rsp + 16]
lea rdi, [rip + .L.str]
lea rsi, [rsp + 8]
xor eax, eax
call __isoc99_scanf(at)PLT
lea rdi, [rip + .L.str.1]
xor esi, esi
xor eax, eax
call printf(at)PLT
xor eax, eax
add rsp, 24
ret
best regards,
Ranier Vilela
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2024-10-28 15:05:38 | Re: Alias of VALUES RTE in explain plan |
Previous Message | Julien Tachoires | 2024-10-28 14:54:59 | Re: Compress ReorderBuffer spill files using LZ4 |