Re: define pg_structiszero(addr, s, r)
От | Ranier Vilela |
---|---|
Тема | Re: define pg_structiszero(addr, s, r) |
Дата | |
Msg-id | CAEudQAq_D5edSnAy2y0Viuk9Y53LTR=FOu8240SSDWmSm_ToAA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: define pg_structiszero(addr, s, r) (Heikki Linnakangas <hlinnaka@iki.fi>) |
Ответы |
Re: define pg_structiszero(addr, s, r)
|
Список | pgsql-hackers |
Em seg., 28 de out. de 2024 às 11:33, Heikki Linnakangas <hlinnaka@iki.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@PLT
lea rdi, [rip + .L.str.1]
xor esi, esi
xor eax, eax
call printf@PLT
xor eax, eax
add rsp, 24
ret
best regards,
Ranier Vilela
В списке pgsql-hackers по дате отправления: