Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 有没有办法增加堆栈大小/递归限制?_C_Linux_Gcc_Recursion_Stack Overflow - Fatal编程技术网

C 有没有办法增加堆栈大小/递归限制?

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,堆栈大小通常由资源管理机制提供

我正在写一个C程序,通过一个分段错误超过了递归限制。有没有办法通过GCC选项或命令行选项来增加程序的递归限制(可能通过增加堆栈大小)?程序正在Ubunutu上运行。

您可以在Linux上使用
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