git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC PATCH 1/2] Replace memset(0) with static initialization where possible

From
Brandon Casey <casey@nrlssc.navy.mil>
Date
Oct 9, 2008, 20:56 UTC
Message-ID
<CqZt8k7g-Uov2ItkgRw6K65RC0ee37ZAckIrbwPLNwDiaHtigtevnA@cipher.nrlssc.navy.mil>
In-Reply-To
<alpine.LFD.2.00.0810091534430.26244@xanadu.home>
Nicolas Pitre wrote:
Show 18 quoted lines
> On Thu, 9 Oct 2008, Brandon Casey wrote:
> 
>> "Possible" benefits:
>>
>>   1) more concise, so it improves readability in most cases
>>   2) gives compiler more flexibility when optimizing
> 
> Beware beware.  At some point this wasn't a gain at all with some gcc 
> versions as it was stupid enough to construct a temporary object on the 
> stack corresponding to "{ 0, }" and afterward do the assignment by 
> *copying* this object to a different stack slot corresponding to the 
> actual variable instead of constructing the initial value in place.
> 
> Also note that, on the other hand, gcc is smart enough to optimize a 
> memset() using a constant size and value already by doing appropriate 
> code replacement inline.  I've also seen cases where gcc did the 
> opposite and replaced an explicit assignment like your patch does with 
> an actual call to memset() when optimizing for size.
I'd call that flexibility.
> So when claiming flexibility for the compiler to better optimize things, 
> please make sure this is really what is happening through assembly dump 
> inspection.

I didn't claim the compiler _would_ do a better job at optimizing if memset wasn't used (though my expectation is that it would do no worse, and I don't have assembly dumps to back that up). I suggested it could give the compiler more flexibility. In some strange way you seem to agree with me and have given 3 examples of ways that compilers may optimize static initialization. :)

Anyway, this is a nothing patch. There is no functional change. If readability is not improved, it is not worth applying. Of course, I don't plan on scanning through and converting all of the existing assignments which use { 0, } to use memset. I find a single step declaration/initialization simpler. Not sure why that seems to be the case in the git source for simple variables but not structures.

-brandon
Previous: Nicolas PitreNext: Nicolas Pitre
Message 5 of 6 in “Replace memset(0) with static initialization where possible”
  1. 1/2 Replace memset(0) with static initialization where possibleBrandon Casey, Oct 9, 2008
  2. Shawn O. PearceOct 9, 2008
  3. Brandon CaseyOct 9, 2008
  4. Nicolas PitreOct 9, 2008
  5. Brandon CaseyOct 9, 2008
  6. Nicolas PitreOct 9, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.