Hay muchos microcontroladores de bajo nivel que tienen pilas de hardware para la llamada / devolución de subrutinas y el manejo de interrupciones, pero dificultan, 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 otros. En estas máquinas, la pila de datos se emula al asignar 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 está haciendo de esta manera, significa que la recursión, una función que se llama a sí misma, directa o indirectamente, no funciona, ya que cada instancia de la función reutiliza las mismas ubicaciones estáticas para su supuesta "privacidad "variables. Algunos compiladores permiten el uso limitado de la recursión (generalmente implementado por medio de un #pragma
de algún tipo), lo que hará que cree una verdadera pila de datos sin importar cuánto ralentice las cosas.
Aparte de esto, ha habido arquitecturas de CPU que no tenían una pila de hardware, ni siquiera para el manejo de subrutinas / interrupciones, incluido el DEC PDP-8 y el 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 ocurra, la máquina también tenía modos de dirección suficientemente flexibles que hacían fácil crear una pila con software.