📜  C程序以查找堆栈的增长方向

📅  最后修改于: 2021-05-25 21:41:50             🧑  作者: Mango

先决条件:C程序的内存布局

在典型的过程中,程序的堆栈段包含局部变量以及每次调用函数时都会保存的信息。每次调用一个函数时,要返回的地址和有关调用者环境的某些信息(例如某些机器寄存器)都保存在堆栈中。然后,新调用的函数在堆栈上为其自动和临时变量分配空间。

堆栈可能会向下或向上增长,具体取决于要为其编译代码的环境,即取决于编译器。如何知道堆栈是向下生长还是向上生长?

这个想法是要执行以下操作:
1)在main中创建一个局部变量。
2)用自己的局部变量编写另一个函数fun()。
3)从main调用fun()。比较两个局部变量的地址。如果fun()的局部变量的地址大于main的局部变量,则堆栈向上增长(即,地址增加)

// C program to check whether stack grows
// downward or upward.
#include
  
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;
}
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。