我编写了一个 C 程序,其中我做了一些相当繁重的堆栈分配,大约 2 MiB。因为我使用的是穷人的 IDE*,所以我每次编译时都会通过 make 自动运行程序以测试它。
我几乎把所有东西都包起来了,但出于某种原因,在一些最后的优化过程中,我直接从 shell 运行它。即时段错误!使用 make 运行它仍然有效,手动运行它总是产生相同的段错误。
我最终将我正在执行的堆栈分配量减少到 256 KiB,这解决了问题。我的理由是 make 可能正在执行该过程,因此它继承了一些奇怪的参数,允许它使用更多的堆栈空间。
虽然现在一切都很好,但我无法验证我的理论。任何人都可以确认或否认,或建议某种测试方法吗?
* zsh、vim、gcc、gdb 和一些疯狂的 makefile
最佳答案
您可以尝试使用 ulimit(1) 设置最大堆栈大小看看它是否有效:
# Limit stack to 1024 KiB
ulimit -s 1024; ./myprogram
# Now no limit
ulimit -s unlimited; ./myprogram
关于c - 程序在由 make 启动时运行,而不是通过 shell,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/663617/