Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
有人告诉我要在C中最小化数组的堆栈溢出,我可以通过从左到右和从右到左的两边填充数组来做到这一点。但基本上我听不懂。请解释以更好地理解。谢谢。
变为以下迭代等效项:
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
有人告诉我要在C中最小化数组的堆栈溢出,我可以通过从左到右和从右到左的两边填充数组来做到这一点。但基本上我听不懂。请解释以更好地理解。谢谢。
最佳答案
堆栈是分配自动变量的地方
您可以通过分配大型对象int x[10000000000]
或具有非常深层次的递归来使它溢出。在多线程环境中每个线程的堆栈分配中可以进一步限制堆栈
避免在堆栈上分配的方法是使用malloc(这是调用new的C版本)在堆上分配一个指针,但这需要通过匹配调用free来增加代码复杂度。
减少深度递归的方法是可能找到较浅(通常更有效)的递归算法。可能从两侧填充数组会导致递归变浅。
但是,通常更好的方法是将递归算法转换为迭代(循环)等效项(通常也可以使用优化的递归来完成)。看一个简单的例子:
以下递归:
unsigned mult(unsigned a, unsigned b)
{
return b ? a+mult(a, b-1) : 0;
}
变为以下迭代等效项:
unsigned mult(unsigned a, unsigned b)
{
unsigned ret=0;
while (b-- > 0)
ret+=a;
return ret;
}
关于c++ - 是否有C语言中的“最小化数组的堆栈溢出”之类的东西? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20335269/
10-16 04:41