Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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