#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的汇编指令,还是什么?具体是从哪句代码开始申请的栈空间?
追答1)程序在运行时有两块可供程序使用的内存空间,一个是堆,一个是栈!而栈的大小位置都有操作系统在加载程序时分配给程序~~。通常C语言所用的malloc之类的函数是从堆中获得内存空间,而栈的使用通常发生在函数间调用,用于传递参数和记录函数间调用层次关系,这个空间不由程序支配。
2)调用printf时,将参数入栈,入栈多少字节取决于参数个数和类型。当printf调用完成再恢复栈,也就是调用printf之前的状态。
3)入栈的内容是数据不是代码~~ 代码是不可以修改 或是像访问数据那样去访问代码~~
4)栈空间由操作系统加载程序时分配。