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

Reply via email to