Una Stack-based VM (Máquina Virtual Basada en Pila) es un modelo de arquitectura de máquina virtual donde las operaciones se realizan manipulando valores en una pila. En lugar de tener un conjunto de registros de propósito general como en una Register-based VM, todas las operaciones (aritméticas, lógicas, de control de flujo) toman sus operandos de la parte superior de la pila y colocan sus resultados de nuevo en la pila. Esto simplifica el diseño del conjunto de instrucciones de la VM, ya que las instrucciones no necesitan especificar explícitamente los operandos, asumiendo que están en la pila.

Numerosos sistemas y herramientas de software utilizan arquitecturas de Stack-based VM debido a su simplicidad y portabilidad. Ejemplos prominentes incluyen la Java Virtual Machine (JVM), que ejecuta bytecode de Java, y la Common Language Runtime (CLR) de .NET, que ejecuta Common Intermediate Language (CIL). Otros ejemplos son la Ethereum Virtual Machine (EVM), fundamental para la ejecución de contratos inteligentes en la blockchain de Ethereum, y lenguajes como Forth y PostScript, que intrínsecamente operan con un modelo de pila. La WebAssembly (Wasm) también utiliza un modelo de pila para su ejecución, lo que facilita su compilación desde diversos lenguajes fuente.

Para un arquitecto de sistemas, entender las Stack-based VMs es crucial por varios motivos. Su simplicidad de diseño puede llevar a implementaciones de intérpretes más compactas y fáciles de verificar, lo que es ventajoso en entornos con recursos limitados o donde la seguridad es primordial (como en la EVM). Sin embargo, la sobrecarga de las operaciones de pila (push/pop) puede resultar en un rendimiento inferior en comparación con las Register-based VMs para ciertas cargas de trabajo, ya que se requiere más memoria y accesos a la misma. La elección entre una arquitectura de pila o de registro impacta directamente la complejidad del compilador, la densidad del código generado y el rendimiento en tiempo de ejecución, siendo un trade-off fundamental en el diseño de plataformas de ejecución de alto nivel o de sistemas embebidos.