runaway代码程序的运行与解释

代码为:

/* Example of deep recursion */
#include <stdio.h>
#include <stdlib.h>

int recurse(int x) {
    int a[1<<15];  /* 4 * 2^15 =  64 KiB */
    printf("x = %d.  a at %p\n", x, a); 
    a[0] = (1<<14)-1;
    a[a[0]] = x-1;
    if (a[a[0]] == 0)
	return -1;
    return recurse(a[a[0]]) - 1;
}

int main(int argc, char *argv[]) {
    int x = 100;
    if (argc > 1)
	x = atoi(argv[1]);
    int v = recurse(x);
    printf("x = %d.  recurse(x) = %d\n", x, v);
    return 0;
}

运行结果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
深度递归要占用系统大量内存,所以递归函数的使用要小心。
以下是反汇编代码:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见过度使用递归函数,使得汇编代码如此庞大,繁琐。

猜你喜欢

转载自blog.csdn.net/qq_44712437/article/details/90723024