C 有没有办法增加堆栈大小/递归限制?
我正在写一个C程序,通过一个分段错误超过了递归限制。有没有办法通过GCC选项或命令行选项来增加程序的递归限制(可能通过增加堆栈大小)?程序正在Ubunutu上运行。您可以在Linux上使用C 有没有办法增加堆栈大小/递归限制?,c,linux,gcc,recursion,stack-overflow,C,Linux,Gcc,Recursion,Stack Overflow,我正在写一个C程序,通过一个分段错误超过了递归限制。有没有办法通过GCC选项或命令行选项来增加程序的递归限制(可能通过增加堆栈大小)?程序正在Ubunutu上运行。您可以在Linux上使用ulimit更改堆栈大小,例如: ulimit -s unlimited 在使用Visual Studio的Windows上,使用/F堆栈大小是操作系统的一个功能,尽管许多早期的操作系统(例如MSDOS)没有进行程序堆栈段控制:由程序保留适当大小的段 对于虚拟内存和32位API,堆栈大小通常由资源管理机制提供
ulimit
更改堆栈大小,例如:
ulimit -s unlimited
在使用Visual Studio的Windows上,使用
/F
堆栈大小是操作系统的一个功能,尽管许多早期的操作系统(例如MSDOS)没有进行程序堆栈段控制:由程序保留适当大小的段
对于虚拟内存和32位API,堆栈大小通常由资源管理机制提供。例如,在Linux上,
ulimit
命令提供了堆栈大小控制的一个来源。其他级别的控制由内核内部强制执行系统策略、内存限制和其他限制的机制提供。您的意思是堆栈溢出,因此发生了分段错误?@iharob:yes,我用gdb
验证了这一点。为什么不迭代编写呢?如果可以转换尾部递归调用格式,可以通过优化GCC将其替换为循环。加载程序创建的线程的堆栈大小是一个链接器参数,所以是。@iharob:问题被标记为GCC,如果它是Windows,它可能会被标记为mingw。ulimit-s unlimited
并不会真正使堆栈大小不受限制。它只允许使用系统配置的最大限制。我认为OP希望使2M堆栈限制更大。。。你不能用ulimit改变这一点,因为那是另一回事。(向下后退)@PeterHorvath你说的2米限制是什么?假设Linux上的限制是200万(通常更高),为什么不允许您更改系统上的限制?结果更好的是给它一个数字,例如ulimit-s 1000000