Tweak vector::_M_realloc_insert for code size

Jonathan Wakely jwakely@redhat.com
Tue Nov 14 17:09:00 GMT 2017


On 11/11/17 19:14 +0100, Marc Glisse wrote:
>Hello,
>
>operator new can clobber memory, it is hard to teach the compiler 
>otherwise since it is replaceable. Here I cache a couple values before 
>the call to the allocator. I checked the result on this simple 
>example:
>
>#include <vector>
>void f(std::vector<int>&v){ v.push_back(0); }
>
>The patch does not affect the fast path where no reallocation is 
>needed. Compiling with -O3 (everything gets inlined into f), I see a 
>nice decrease in code size on x86_64
>
>$ size old.o new.o
>   text	   data	    bss	    dec	    hex	filename
>    462	      0	      0	    462	    1ce	old.o
>    376	      0	      0	    376	    178	new.o
>
>Even at -O2 where _M_realloc_insert is not inlined, I get a slight 
>decrease in code size (490 -> 470). On x86, that's 531 -> 519 (465 -> 
>387 at -O3).
>
>I'm not going to modify every function like that, I just happened to 
>be looking at this example for other reasons, and the size gain is 
>larger than I expected, so I am posting the patch.

That's a nice improvement, OK for trunk. Thanks.



More information about the Libstdc++ mailing list