Saltar al contenido

La pila de llamadas

Cuando una función llama a otra, el programa tiene que recordar dónde seguir al volver. Lo guarda en una pila: la pila de llamadas. Cada llamada apila un registro (sus variables y el punto de retorno); cada retorno lo desapila.

Texto
función a(): b(); escribir "a termina"función b(): c(); escribir "b termina"función c(): escribir "c termina"

Llamar a a apila a, luego b, luego c. Termina c (se desapila), termina b, termina a. Por eso «c termina» se escribe primero.

La pila de llamadas de a, b y cSeis pasos. Pasos 1 a 3: se apilan a, luego b, luego c, con c en el tope. Paso 4: c escribe «c termina» y se desapila; el tope es b. Paso 5: b escribe «b termina» y se desapila; queda a. Paso 6: a escribe «a termina» y la pila queda vacía.Paso 1 de 6a*← topese llama a aPaso 2 de 6ab*← topea llama a bPaso 3 de 6abc*← topeb llama a cPaso 4 de 6ab← topec escribe «c termina» y salePaso 5 de 6a← topeb escribe «b termina» y salePaso 6 de 6vacíaa escribe «a termina» y sale
Cada llamada apila un registro y cada retorno lo desapila. En los pasos 4 y 5, el borde grueso marca el registro al que se vuelve.

Una función que se llama a sí misma sin una condición que la detenga apila registros sin parar hasta agotar el espacio: es el error conocido como desbordamiento de pila.

Su fila en la tabla de costos

Esta es la fila de la pila hecha sobre un array dinámico con la cima al final.

Representación apilar desapilar, cima, vacía
pila sobre array dinámico O(1) amortizado; O(n) en el peor caso, cuando el array crece O(1)

Lee el recorrido de esta página. Al pasar al siguiente momento, este cuenta como leído.