libstdc++: Speed up push_back

Marc Glisse marc.glisse@inria.fr
Fri Nov 24 19:45:21 GMT 2023


On Thu, 23 Nov 2023, Jonathan Wakely wrote:

> That's why we need -fsane-operator-new

Although the standard forbids it, some of us just provide an inline 
implementation

inline void* operator new(std::size_t n){return malloc(n);}
inline void operator delete(void*p)noexcept{free(p);}
inline void operator delete(void*p,std::size_t)noexcept{free(p);}

(I could certainly add a check to abort if malloc returns 0 or other 
details, depending on what the application calls for)

It used to enable a number of optimizations, for instance in gcc-9

auto f(){ return std::vector<int>(4096); }

was optimized to just one call to calloc (someone broke that in gcc-10).

Using LTO on libsupc++ is related.

I don't know if we want to define "sane" operators new/delete, or just 
have a flag that promises that we won't try to replace the default ones.

-- 
Marc Glisse


More information about the Libstdc++ mailing list