xcode

理解C语言递归up_and_down

独自空忆成欢 提交于 2020-11-11 02:16:26
函数调用、理解递归 对于程序,编译器会对其分配一段内存,在逻辑上可以分为代码段,数据段,堆,栈。 代码段:保存程序文本, 指令指针EIP就是指向代码段 ,可读可执行不可写 数据段:保存初始化的全局变量和静态变量,可读可写不可执行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存, 向地址增大的方向增长,可读可写可执行 栈(Stack):存放局部变量,函数参数,当前状态,函数调用信息等,向地址减小的方向增长,非常非常重要,可读可写可执行 来一张图: [图片上传失败...(image-d902e7-1512804060985)] 上面这些对理解调用栈有什么用呢。其实想要彻底弄明白,还需要懂汇编才行。这里我们只需要知道栈会存放 局部变量,函数参数,当前状态,函数调用信息 对后面的理解就够了。 下面通过一个例子来理解递归调用的执行过程(Xcode) void up_and_down ( int n) { printf( "before: Level %d:n location %p\n",n,&n); /* 1 */ if(n< 4) up_and_down(n+ 1); printf( "after: Level %d:n location %p\n",n,&n); /* 2 */ } int main ( int argc, const char * argv[])