在C语言中有什么类似'最小化数组的堆栈溢出'吗?

时间:2013-12-02 18:30:55

标签: c++ c

有人告诉我最小化C中数组的堆栈溢出,我可以通过从左右两侧填充数组来完成它,就像那样。但基本上我不明白。请解释,以便更好地理解。谢谢。

1 个答案:

答案 0 :(得分:3)

堆栈是分配自动变量的地方

您可以通过分配大对象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;
}