C程序寻找堆栈的增长方向

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

null

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

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

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

// 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" );
else
printf ( "Stack grows downward" );
}
int main()
{
// fun's local variable
int main_local;
fun(&main_local);
return 0;
}


本文由 阿卡什·沙兰 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享