Em seg., 28 de out. de 2024 às 11:33, Heikki Linnakangas <hlinn...@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