Re: [PATCH v3 0/3]
- From
Jeff King <peff@peff.net>
- Date
- Jun 30, 2021, 17:45 UTC
- Message-ID
- <YNytp0JAIaQih0Y4@coredump.intra.peff.net>
- In-Reply-To
- <YNyrDxUO1PlGJvCn@coredump.intra.peff.net>
On Wed, Jun 30, 2021 at 01:34:07PM -0400, Jeff King wrote:
Show 16 quoted lines
> As an aside, having to have a separate bundle_header_init() and
> BUNDLE_HEADER_INIT is annoying (because they both must be kept up to
> date with each other), but quite common in our code base. I wonder if
> writing:
>
> void bundle_header_init(struct bundle_header *header)
> {
> struct bundle_header blank = BUNDLE_HEADER_INIT;
> memcpy(header, &blank, sizeof(*header));
> }
>
> would let a smart enough compiler just init "header" in place without
> the extra copy (the performance of a single bundle_header almost
> certainly doesn't matter, but it might for other types).
>
> Just musing. ;)For my own curiosity, the answer is yes: https://godbolt.org/z/s54dc6ss9
With "gcc -O2" the memcpy goes away and we init "header" directly.
If we want to start using this technique widely, I don't think it should be part of your series, though. This probably applies to quite a few data structures, so it would make more sense to have a series which converts several.
-Peff