当前位置:编程学习 > C/C++ >>

关于C语言递归与系统栈的问题。

#include<stdio.h> void print(int a) { printf("%d\n",a++); print(a); } void main() { int a=0; print(a); } 在打印a的过程中,内存和cpu是怎样工作的?能否详细讲解下?11243的结果能看出这个系统栈容量多大?系统栈的地址在哪?什么时候分配的?这涉及到汇编级别的知识,我想更加了解C程序更底层的硬件工作过程。
追问:换个问法吧。第一,这个print函数里面执行的printf是一直往栈里面压参数吗?也就是说程序结束的时候是栈满了,不能再往里压了是吗?第二,栈里面存的是单单一个char数据,还是包括printf的汇编指令,还是什么?具体是从哪句代码开始申请的栈空间?
答案:C语言调用用函数时,由调用程序向栈中压入函数参数,最后再压入返回地址,后进入被调用函数,当被调用函数执行完成参考压入栈的返回地址回到调用程序。
你写的那个程序就是 一直向栈中压入数据没有返回。这个栈的地址依赖于编译器和操作系统。不同的编译器和操作系统分给程序的地址和长度都可以不同。
这个空间的分配在操作系统加载程序时分配,一般不可改变。
所以上面的11243不能说明容量~~

上一个:在c++程序运行时为什么会出现.exe停止工作
下一个:c++关于getline的小问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,