runaway函数
-这个程序是查看你所用的电脑中所分配的栈的大小
#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;
}
gcc编译后的结果:
zhangjinxue@zhangjinxue-virtual-machine:/mnt/hgfs/2019linux/runaway$ ./a.out
x = 100. a at 0x7ffd1756cf40
x = 99. a at 0x7ffd1754cf10
x = 98. a at 0x7ffd1752cee0
x = 97. a at 0x7ffd1750ceb0
x = 96. a at 0x7ffd174ece80
x = 95. a at 0x7ffd174cce50
x = 94. a at 0x7ffd174ace20
x = 93. a at 0x7ffd1748cdf0
x = 92. a at 0x7ffd1746cdc0
x = 91. a at 0x7ffd1744cd90
x = 90. a at 0x7ffd1742cd60
x = 89. a at 0x7ffd1740cd30
x = 88. a at 0x7ffd173ecd00
x = 87. a at 0x7ffd173cccd0
x = 86. a at 0x7ffd173acca0
x = 85. a at 0x7ffd1738cc70
x = 84. a at 0x7ffd1736cc40
x = 83. a at 0x7ffd1734cc10
x = 82. a at 0x7ffd1732cbe0
x = 81. a at 0x7ffd1730cbb0
x = 80. a at 0x7ffd172ecb80
x = 79. a at 0x7ffd172ccb50
x = 78. a at 0x7ffd172acb20
x = 77. a at 0x7ffd1728caf0
x = 76. a at 0x7ffd1726cac0
x = 75. a at 0x7ffd1724ca90
x = 74. a at 0x7ffd1722ca60
x = 73. a at 0x7ffd1720ca30
x = 72. a at 0x7ffd171eca00
x = 71. a at 0x7ffd171cc9d0
x = 70. a at 0x7ffd171ac9a0
x = 69. a at 0x7ffd1718c970
x = 68. a at 0x7ffd1716c940
x = 67. a at 0x7ffd1714c910
x = 66. a at 0x7ffd1712c8e0
x = 65. a at 0x7ffd1710c8b0
x = 64. a at 0x7ffd170ec880
x = 63. a at 0x7ffd170cc850
x = 62. a at 0x7ffd170ac820
x = 61. a at 0x7ffd1708c7f0
x = 60. a at 0x7ffd1706c7c0
x = 59. a at 0x7ffd1704c790
x = 58. a at 0x7ffd1702c760
x = 57. a at 0x7ffd1700c730
x = 56. a at 0x7ffd16fec700
x = 55. a at 0x7ffd16fcc6d0
x = 54. a at 0x7ffd16fac6a0
x = 53. a at 0x7ffd16f8c670
x = 52. a at 0x7ffd16f6c640
x = 51. a at 0x7ffd16f4c610
x = 50. a at 0x7ffd16f2c5e0
x = 49. a at 0x7ffd16f0c5b0
x = 48. a at 0x7ffd16eec580
x = 47. a at 0x7ffd16ecc550
x = 46. a at 0x7ffd16eac520
x = 45. a at 0x7ffd16e8c4f0
x = 44. a at 0x7ffd16e6c4c0
x = 43. a at 0x7ffd16e4c490
x = 42. a at 0x7ffd16e2c460
x = 41. a at 0x7ffd16e0c430
x = 40. a at 0x7ffd16dec400
x = 39. a at 0x7ffd16dcc3d0
x = 38. a at 0x7ffd16dac3a0
段错误 (核心已转储)
zhangjinxue@zhangjinxue-virtual-machine:/mnt/hgfs/2019linux/runaway$ ./a.out 20x = 20. a at 0x7ffc21259040
x = 19. a at 0x7ffc21239010
x = 18. a at 0x7ffc21218fe0
x = 17. a at 0x7ffc211f8fb0
x = 16. a at 0x7ffc211d8f80
x = 15. a at 0x7ffc211b8f50
x = 14. a at 0x7ffc21198f20
x = 13. a at 0x7ffc21178ef0
x = 12. a at 0x7ffc21158ec0
x = 11. a at 0x7ffc21138e90
x = 10. a at 0x7ffc21118e60
x = 9. a at 0x7ffc210f8e30
x = 8. a at 0x7ffc210d8e00
x = 7. a at 0x7ffc210b8dd0
x = 6. a at 0x7ffc21098da0
x = 5. a at 0x7ffc21078d70
x = 4. a at 0x7ffc21058d40
x = 3. a at 0x7ffc21038d10
x = 2. a at 0x7ffc21018ce0
x = 1. a at 0x7ffc20ff8cb0
x = 20. recurse(x) = -20