先决条件: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基础课程》。