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

[PATCH v3 0/2] alloc.c: remove alloc_raw_commit_node() function

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
Jul 10, 2014, 23:57 UTC
Message-ID
<53BF2857.8000603@ramsay1.demon.co.uk>
Hi Jeff,
Another attempt to remove this intermediate allocator. ;-)

I didn't think I would like this approach before I started to look at doing this patch, but now I think I rather like it!

The first patch uses an inline function (alloc_node()) to implement the allocators, redefining the macro to declare the allocators to, basically:

    static struct alloc_state something_state;
    void *alloc_something_node(void)
    {
    	return alloc_node(&something_state, sizeof(struct something));
    }

Then alloc_commit_node() can also use the alloc_node() function in its implementation.

I checked that the alloc_node() function was actually inlined by gcc, which it was for -O1 -> -O3 (but not for -O0, obviously). The generated assembler looked very similar (but not identical) to the code generated without this patch. Also, I did a quick (and admittedly unsophisticated) performance test. I could not detect any difference, within the noise level of the timings, between the two. (Also, operf barely registered any samples against the alloc functions, for './git log -p >/dev/null').

I also checked the assembler generated by clang, and the story was _almost_ the same. For -O2 -> -O3, clang produced very similar results to gcc. For -O1, clang didn't inline alloc_node(), but used it as a 'leaf' function; the blob allocator function 'fell into' alloc_node() and the other DEFINE-ed allocators 'jmp'-ed to alloc_node() rather than call-ing it. The alloc_commit_node() allocator did actually call alloc_node(). (probably because it was more complicated than a single return ...).

Note this was tested (on 32-bit Linux Mint 17) with gcc 4.8.2 and clang 3.4. (Other compilers probably will behave differently ...)

The second patch is just a minor clean-up and could be squashed into the first patch. (NOTE: I assume that you want c->index to start at zero; if not ...)

ATB, Ramsay Jones

Ramsay Allan Jones (2):
  alloc.c: remove the alloc_raw_commit_node() function
  alloc.c: remove the redundant commit_count variable
 alloc.c | 50 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 30 insertions(+), 20 deletions(-)
-- 
2.0.0
Message 1 of 1 in “alloc.c: remove alloc_raw_commit_node() function”
  1. 0/2 alloc.c: remove alloc_raw_commit_node() functionRamsay Jones, Jul 10, 2014

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.