Before I comment, please understand that the prior post (nor this) in any way is meant as a grumpy - I have all the answers post. There is an element of punch however to give a different perspective on using malloc on microcontrollers. :)
As I said earlier the heap does NOT crash into the stack if used properly, however the stack DOES crash into the heap. BUT I think the stack doesn't stop there. I need to double check this, but I'm pretty sure the stack will happily trash the .bss segment for the same reason. I wouldn't be surprised if it carried right on down to .data as well. Of course by then the game is well over.
When two parties crash, it is more of an academic issue who's fault it is, the damage is inflicted nevertheless (the insurance company may see it differently however).
Also, keep in mind that when the stack trash the heap, any live heap pointer into the (now) stack region, will trash the stack - and as you put it - game over.
in a generalized case, building linked lists, binary trees - well - erm... dynamic data structures would have been a challenge without dynamic memory.
Static memory does not limit you in any way with regards to data structures/models. You can pre-allocate your data structures (arrays, struct's, ...) and build your references runtime for any conceivable list or tree you like. Doing it in static memory is just as easy (or difficult) as with dynamic memory.
Woah there - now you've gone way to far.
Microsoft bashing is an art I'm not entertaining. Look at what they do well and learn from that. The .NET memory management model solves a lot of problems difficult to control with other schemes. This is no solution for microcontrollers however.
Well perhaps but I find bottle necks are usually easier to find by tracking them rather than trying to predict them but maybe that's just me.
I think we should do it anyway that best serves the purpose. The point is to find issues before we ship a product.
If you want to study malloc disaster in practice, I suggest you Google Arduino and String library. That's a winning combination for horror stories on "shouldn't this work, unexpected behavior, seem to hang ...). None of the library calls to malloc are checked for errors (and why should they - there is nothing meaningful they can do about it).