> flexible memory allocation strategies per data structure
You realize that that's not exactly flexible. Tieing shape to behaviour in this way is where the pain starts.
Overloading new/delete, STL allocators, <build your own while giving it as template parameter>, not sure they tie shape to behavior.
In fact C++ allows for flexible memory allocation strategies per data structure, while C forces one to hand code them all and replacing something like malloc affects the whole executable behavior.