The thing about C is that programmer should do check size before calling function with double arr[n]. Isn't that point of C? On the other hand, user can make fast stack allocation which, depending on situation, can be good. Stack is insecure by default, OS should put it really far from other parts. In embedded systems, well there you must always think about these kind of things.
Btw, how are (p)thread stacks implemented? Every thread has it's own stack, that's ein interesting situation.