The terms "automatic" and "dynamic" storage are arguably preferable in the C++ specifications over "stack" and "heap" respectively because the C++ specifications do not require that allocation/deallocation be implemented specifically using the stack/heap model.
Are there any alternate models for allocation/deallocation other than stack and heap?
The terminology opinions seem to be based on faulty assumptions.
Regarding allocation schemes, it's difficult to grok what you mean by "heap", but if you mean explicit deallocation of dynamically allocated objects, then C++ has never formally required that. When garbage collection gained some support in C++11 it was because it was already proven technology, with e.g. the Boehm garbage collector for C++03.
C++ does require and has always required a stack, but not any particular implementation of that stack. With fine-grained cooperative multitasking it may be that we'll see implementations that use linked list based stacks. I don't know any such yet, though, as of medio 2016.