Conversation

there's a lot I don't understand about optimizers, but is it unreasonable to expect a modern C++ compiler to turn foo() into an add instruction?
Image
13
51
Replying to and
In general, I don't think either Clang or GCC is capable of getting rid of malloc/free or new/delete outside of a special case for completely dead stores. They aren't capable of doing escape analysis and lowering it to a stack allocation / virtual registers so it won't go away.
2
1
Last time I checked, the GCC dead store elimination also only works for malloc/free and only when the code is buggy and lacks an out-of-memory check. Clang is better at this, but it lacks a way to turn this into a dead store anyway. It can't work with malloc/new directly either.
1
2
I think part of the reason lowering dynamic allocations to stack allocations / virtual registers isn't implemented is to avoid the risk of causing a stack overflow. They can and should probably do a very conservative version of it which would end up optimizing this away at least.
1
2
Show replies