先决条件: 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