C语言中有没有类似'minimizing stack overflow of an array'的东西?

Is there anything like 'minimizing stack overflow of an array' in C language?

本文关键字:an of array overflow minimizing 语言 有没有 stack      更新时间:2023-10-16

有人告诉我,如何最大限度地减少C中数组的堆栈溢出,我可以通过从左到右和从右到左填充数组来实现这一点,诸如此类。但基本上我不明白。请解释以便更好地理解。非常感谢。

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

您可以通过分配巨大的对象int x[10000000000]或使用非常深入的递归级别来溢出它。在多线程环境的每个线程的堆栈分配中,堆栈可能会受到进一步的限制

避免在堆栈上分配的方法是有一个指针,并使用malloc在堆上分配(这是调用new的C版本),但这需要一个匹配的调用来释放,从而增加了代码的复杂性。

减少深度递归的方法是可能找到一种更浅(通常更有效)的递归算法。从两边填充数组可能会导致较浅的递归。

然而,通常更好的方法是将递归算法转换为迭代(循环)等效算法(通常也可以使用优化的递归来完成)。看看一个微不足道的例子:

以下递归:

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;
}
相关文章: