CSAPP:runaway(gcc)

    xiaoxiao2024-12-16  11

    查看电脑中所分配栈的大小。

    代码全览

    /* Example of deep recursion */ #include <stdio.h> #include <stdlib.h> int recurse(int x) { int a[1<<15]; /* 4 * 2^15 = 64 KB */ 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; }

    运行结果

    suiyi@suiyi-virtual-machine:/mnt/hgfs/share/runaway$ ./a.out x = 100. a at 0x7ffeb78d4f50 x = 99. a at 0x7ffeb78b4f20 x = 98. a at 0x7ffeb7894ef0 x = 97. a at 0x7ffeb7874ec0 x = 96. a at 0x7ffeb7854e90 x = 95. a at 0x7ffeb7834e60 x = 94. a at 0x7ffeb7814e30 x = 93. a at 0x7ffeb77f4e00 x = 92. a at 0x7ffeb77d4dd0 x = 91. a at 0x7ffeb77b4da0 x = 90. a at 0x7ffeb7794d70 x = 89. a at 0x7ffeb7774d40 x = 88. a at 0x7ffeb7754d10 x = 87. a at 0x7ffeb7734ce0 x = 86. a at 0x7ffeb7714cb0 x = 85. a at 0x7ffeb76f4c80 x = 84. a at 0x7ffeb76d4c50 x = 83. a at 0x7ffeb76b4c20 x = 82. a at 0x7ffeb7694bf0 x = 81. a at 0x7ffeb7674bc0 x = 80. a at 0x7ffeb7654b90 x = 79. a at 0x7ffeb7634b60 x = 78. a at 0x7ffeb7614b30 x = 77. a at 0x7ffeb75f4b00 x = 76. a at 0x7ffeb75d4ad0 x = 75. a at 0x7ffeb75b4aa0 x = 74. a at 0x7ffeb7594a70 x = 73. a at 0x7ffeb7574a40 x = 72. a at 0x7ffeb7554a10 x = 71. a at 0x7ffeb75349e0 x = 70. a at 0x7ffeb75149b0 x = 69. a at 0x7ffeb74f4980 x = 68. a at 0x7ffeb74d4950 x = 67. a at 0x7ffeb74b4920 x = 66. a at 0x7ffeb74948f0 x = 65. a at 0x7ffeb74748c0 x = 64. a at 0x7ffeb7454890 x = 63. a at 0x7ffeb7434860 x = 62. a at 0x7ffeb7414830 x = 61. a at 0x7ffeb73f4800 x = 60. a at 0x7ffeb73d47d0 x = 59. a at 0x7ffeb73b47a0 x = 58. a at 0x7ffeb7394770 x = 57. a at 0x7ffeb7374740 x = 56. a at 0x7ffeb7354710 x = 55. a at 0x7ffeb73346e0 x = 54. a at 0x7ffeb73146b0 x = 53. a at 0x7ffeb72f4680 x = 52. a at 0x7ffeb72d4650 x = 51. a at 0x7ffeb72b4620 x = 50. a at 0x7ffeb72945f0 x = 49. a at 0x7ffeb72745c0 x = 48. a at 0x7ffeb7254590 x = 47. a at 0x7ffeb7234560 x = 46. a at 0x7ffeb7214530 x = 45. a at 0x7ffeb71f4500 x = 44. a at 0x7ffeb71d44d0 x = 43. a at 0x7ffeb71b44a0 x = 42. a at 0x7ffeb7194470 x = 41. a at 0x7ffeb7174440 x = 40. a at 0x7ffeb7154410 x = 39. a at 0x7ffeb71343e0 x = 38. a at 0x7ffeb71143b0 段错误 (核心已转储) suiyi@suiyi-virtual-machine:/mnt/hgfs/share/runaway$ ./a.out 38 x = 38. a at 0x7ffe3b85a270 x = 37. a at 0x7ffe3b83a240 x = 36. a at 0x7ffe3b81a210 x = 35. a at 0x7ffe3b7fa1e0 x = 34. a at 0x7ffe3b7da1b0 x = 33. a at 0x7ffe3b7ba180 x = 32. a at 0x7ffe3b79a150 x = 31. a at 0x7ffe3b77a120 x = 30. a at 0x7ffe3b75a0f0 x = 29. a at 0x7ffe3b73a0c0 x = 28. a at 0x7ffe3b71a090 x = 27. a at 0x7ffe3b6fa060 x = 26. a at 0x7ffe3b6da030 x = 25. a at 0x7ffe3b6ba000 x = 24. a at 0x7ffe3b699fd0 x = 23. a at 0x7ffe3b679fa0 x = 22. a at 0x7ffe3b659f70 x = 21. a at 0x7ffe3b639f40 x = 20. a at 0x7ffe3b619f10 x = 19. a at 0x7ffe3b5f9ee0 x = 18. a at 0x7ffe3b5d9eb0 x = 17. a at 0x7ffe3b5b9e80 x = 16. a at 0x7ffe3b599e50 x = 15. a at 0x7ffe3b579e20 x = 14. a at 0x7ffe3b559df0 x = 13. a at 0x7ffe3b539dc0 x = 12. a at 0x7ffe3b519d90 x = 11. a at 0x7ffe3b4f9d60 x = 10. a at 0x7ffe3b4d9d30 x = 9. a at 0x7ffe3b4b9d00 x = 8. a at 0x7ffe3b499cd0 x = 7. a at 0x7ffe3b479ca0 x = 6. a at 0x7ffe3b459c70 x = 5. a at 0x7ffe3b439c40 x = 4. a at 0x7ffe3b419c10 x = 3. a at 0x7ffe3b3f9be0 x = 2. a at 0x7ffe3b3d9bb0 x = 1. a at 0x7ffe3b3b9b80 x = 38. recurse(x) = -38 suiyi@suiyi-virtual-machine:/mnt/hgfs/share/runaway$ ./a.out 6 x = 6. a at 0x7fff7442d560 x = 5. a at 0x7fff7440d530 x = 4. a at 0x7fff743ed500 x = 3. a at 0x7fff743cd4d0 x = 2. a at 0x7fff743ad4a0 x = 1. a at 0x7fff7438d470 x = 6. recurse(x) = -6
    最新回复(0)