Programa C para encontrar la dirección de crecimiento de la pila

Requisito previo: diseño de memoria de programas C

En un proceso típico, un segmento de la pila del programa contiene variables locales junto con información que se guarda cada vez que se llama a una función. Cada vez que se llama a una función, se guarda en la pila la dirección a la que regresar y cierta información sobre el entorno de la persona que llama, como algunos de los registros de la máquina. La función recién llamada luego asigna espacio en la pila para sus variables automáticas y temporales.

La pila puede crecer hacia arriba o hacia abajo según el entorno para el que se compila el código, es decir, depende del compilador. ¿Cómo saber si la pila crece hacia abajo o hacia arriba?

La idea es hacer lo siguiente:
1) Hacer una variable local en main.
2) Escriba otra función fun() con su propia variable local.
3) Haz una llamada a fun() desde main. Compara direcciones de dos variables locales. Si la dirección de la variable local de fun() es mayor que la variable local de main, entonces la pila crece hacia arriba (es decir, las direcciones aumentan)

// C program to check whether stack grows
// downward or upward.
#include<stdio.h>
  
void fun(int *main_local_addr)
{
    int fun_local;
    if (main_local_addr < &fun_local)
        printf("Stack grows upward\n");
    else
        printf("Stack grows downward\n");
}
  
int main()
{
    // fun's local variable
    int main_local;
  
    fun(&main_local);
    return 0;
}

Este artículo es una contribución de Akash Sharan . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *