Hay muchos microcontroladores de bajo nivel que tienen pilas de hardware para llamadas / devoluciones de subrutina y manejo de interrupciones, pero hacen que sea difícil, si no imposible, almacenar datos (variables) allí, e implementar una pila de datos puramente de software sería terriblemente ineficiente. El 8051 es un ejemplo clásico, y los PIC de gama baja (PIC12 / PIC16) son otro. En estas máquinas, la pila de datos se emula asignando ubicaciones de almacenamiento estático para variables automáticas, y la cantidad de reutilización de estas ubicaciones depende de la sofisticación del compilador.
Tenga en cuenta que si la emulación de pila se realiza de esta manera, significa que la recursión, una función que se llama a sí misma, ya sea directa o indirectamente, no funciona, ya que cada instancia de la función reutiliza las mismas ubicaciones estáticas para sus variables supuestamente "privadas". Algunos compiladores permiten el uso limitado de la recursividad (generalmente implementada por medio de #pragma
algún tipo), lo que hará que cree una verdadera pila de datos sin importar cuánto desacelere las cosas.
Por otro lado, ha habido arquitecturas de CPU que no tenían una pila de hardware, ni siquiera para el manejo de subrutinas / interrupciones, incluidos DEC PDP-8 e IBM System / 360. En estas máquinas, la PC (dirección de retorno) y el registro de estado (para interrupciones) se guardaron en registros o ubicaciones de memoria, pero en cada caso que se me ocurre, la máquina también tenía modos de dirección suficientemente flexibles que facilitaban la creación de una pila con software