Explique el concepto de marco de pila en pocas palabras.

Resuelto ikostia asked hace 12 años • 6 respuestas

Parece que entiendo la idea de la pila de llamadas en el diseño de lenguajes de programación. Pero no puedo encontrar (probablemente, simplemente no busco lo suficiente) ninguna explicación decente de qué es el marco de pila .

Por eso me gustaría pedirle a alguien que me lo explique en pocas palabras.

ikostia avatar Apr 08 '12 02:04 ikostia
Aceptado

Un marco de pila es un marco de datos que se inserta en la pila. En el caso de una pila de llamadas, un marco de pila representaría una llamada a una función y sus datos de argumento.

Si no recuerdo mal, la dirección de retorno de la función se inserta primero en la pila, luego los argumentos y el espacio para las variables locales. Juntos, forman el "marco", aunque es probable que esto dependa de la arquitectura. El procesador sabe cuántos bytes hay en cada cuadro y mueve el puntero de la pila en consecuencia a medida que los cuadros se empujan y sacan de la pila.

EDITAR:

Existe una gran diferencia entre la pila de llamadas de nivel superior y la pila de llamadas del procesador.

Cuando hablamos de la pila de llamadas de un procesador, estamos hablando de trabajar con direcciones y valores a nivel de byte/palabra en código ensamblador o de máquina. Hay "pilas de llamadas" cuando se habla de lenguajes de nivel superior, pero son una herramienta de depuración/tiempo de ejecución administrada por el entorno de ejecución para que pueda registrar lo que salió mal con su programa (en un nivel alto). En este nivel, a menudo se conocen cosas como números de línea y nombres de métodos y clases. Cuando el procesador recibe el código, no tiene absolutamente ningún concepto de estas cosas.

Tony R avatar Apr 07 '2012 19:04 Tony R

Si comprende muy bien la pila, comprenderá cómo funciona la memoria en el programa y si comprende cómo funciona la memoria en el programa, comprenderá cómo se almacena la función en el programa y si comprende cómo se almacena la función en el programa, comprenderá cómo funciona la función recursiva y si Entiendes cómo funciona la función recursiva, entenderás cómo funciona el compilador y, si entiendes cómo funciona el compilador, tu mente funcionará como compilador y depurarás cualquier programa muy fácilmente.

Déjame explicarte cómo funciona la pila:

Primero debes saber cómo se representan las funciones en la pila:

El montón almacena valores asignados dinámicamente.
Stack almacena valores de asignación y eliminación automática.

ingrese la descripción de la imagen aquí

Entendamos con el ejemplo:

def hello(x):
    if x==1:
        return "op"
    else:
        u=1
        e=12
        s=hello(x-1)
        e+=1
        print(s)
        print(x)
        u+=1
    return e

hello(4)

Ahora comprenda partes de este programa:

ingrese la descripción de la imagen aquí

Ahora veamos qué es una pila y cuáles son sus partes:

ingrese la descripción de la imagen aquí

Asignación de la pila:

Recuerde una cosa: si se cumple la condición de retorno de cualquier función, sin importar si ha cargado las variables locales o no, regresará inmediatamente de la pila con su marco de pila. Significa que siempre que cualquier función recursiva cumpla con la condición base y coloquemos un retorno después de la condición base, la condición base no esperará para cargar las variables locales que se encuentran en la parte "de lo contrario" del programa. Inmediatamente devolverá el fotograma actual de la pila, tras lo cual el siguiente fotograma estará ahora en el registro de activación.

Vea esto en la práctica:

ingrese la descripción de la imagen aquí

Desasignación del bloque:

Entonces, ahora, cada vez que una función encuentra una declaración de retorno, elimina el marco actual de la pila.

Al regresar de la pila, los valores se devolverán en orden inverso al orden original en el que fueron asignados en la pila.

ingrese la descripción de la imagen aquí

Aaditya Ura avatar Oct 18 '2016 11:10 Aaditya Ura