栈的分配(Linux环境下)
源代码
/* 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;
}
代码解释
- << //移位运算,左移。移n位相当于乘以2^n。
Linux环境下运行结果
不带参数
带参数
结果分析
- 计算机运算时会自动分配空间用于存储局部变量。
- 递归过程中,计算机内部不断调用新的存储空间,但存储空间有限,不断的递归导致新产生的数据覆盖原有的数据,阻断了程序返回的途径,产生错误。