-这个程序是查看你所用的电脑中所分配的栈的大小
#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