Diferencia entre revisiones de «Pila (informática)»

Contenido eliminado Contenido añadido
m Deshecha la edición 118219339 de Javier.fa (disc.)
Etiqueta: Deshacer
WikiMoliner (discusión · contribs.)
Sin resumen de edición
Línea 13:
* Reconocedores sintácticos de [[Lenguaje libre de contexto|lenguajes independientes del contexto]].
* Implementación de [[recursividad]].
 
En un [[sistema operativo]] cada proceso tiene un espacio de memoria (pila) para almacenar valores y llamadas a funciones.
 
Una [[pila acotada]] es una pila limitada a un tamaño máximo impuesto en su especificación.
Línea 42 ⟶ 43:
== Pilas Hardware ==
 
Un uso muy común de las pilas a nivel de arquitectura [[hardware]] es la asignación de memoria.
 
== Arquitectura básica de una pila ==
Línea 71 ⟶ 72:
== Soporte de Software ==
 
En programas de aplicación escrito en un [[lenguaje de alto nivel]], una pila puede ser implementada de manera eficiente, ya sea usando vectores o listas enlazadas. En LISP no hay necesidad de aplicar la pila, puesto que las funciones apilar y desapilar están disponibles para cualquier lista. Adobe PostScript también está diseñada en torno a una pila que se encuentra directamente visible y manipuladas por el programador.
El uso de las pilas está muy presente en el desarrollo de software por ello la importancia de las pilas como tipo abstracto de datos.
 
Línea 107 ⟶ 108:
Supongamos que se está procesando una función y en su interior llama a otra función. La función se abandona para procesar la función de la llamada, pero antes se almacena en una pila la dirección que apunta a la función. Ahora supongamos que esa nueva función llama a su vez a otra función. Igualmente, se almacena su dirección, se abandona y se atiende la petición. Así en tantos casos como existan peticiones. La ventaja de la pila es que no requiere definir ninguna estructura de control ni conocer las veces que el programa estará saltando entre funciones para después retomarlas, con la única limitación de la capacidad de almacenamiento de la pila. Conforme se van cerrando las funciones, se van rescatando las funciones precedentes mediante sus direcciones almacenadas en la pila y se va concluyendo su proceso, esto hasta llegar a la primera.
 
El caso típico es el de una [[función recursiva]] (que se llama a sí misma), esto es posible implementarlo con sencillez mediante una pila. La función se llama a sí misma tantas veces como sea necesario hasta que el resultado de la función cumpla la condición de retorno; entonces, todas las funciones abiertas van completando su proceso en cascada. No se necesita saber cuandas veces se anidará y, por tanto, tampoco cuando se cumplirá la condición, con la única limitación de la capacidad de la pila. De sobrepasarse ese límite, normalmente porque se entra en un bucle sin final, se produce el «error de desbordamiento de la pila».
 
La ordenación de datos por el [[Ordenamiento de burbuja|método de la burbuja]] se resuelve mediante una función recursiva.
Línea 118 ⟶ 119:
Forth utiliza dos pilas, una para pasar argumentos y una subrutina de direcciones de retorno. El uso de una pila de retorno es muy común, pero el uso poco habitual de un argumento para una pila legible para humanos es el lenguaje de programación Forth razón que se denomina una pila basada en el idioma.
 
Muchas [[Virtualización|máquinas virtuales]] también están orientadas hacia la pila, incluida la p-código máquina y la máquina virtual Java.
 
Casi todos los entornos de computación de tiempo de ejecución de memoria utilizan una pila especial PILA para tener información sobre la llamada de un procedimiento o función y de la anidación con el fin de cambiar al contexto de la llamada a restaurar cuando la llamada termina. Ellos siguen un protocolo de tiempo de ejecución entre el que llama y el llamado para guardar los argumentos y el valor de retorno en la pila. Pila es una forma importante de apoyar llamadas anidadas o a funciones recursivas. Este tipo de pila se utiliza implícitamente por el compilador para apoyar CALL y RETURN estados (o sus equivalentes), y no es manipulada directamente por el programador.