C语言中有没有类似'minimizing stack overflow of an array'的东西?
Is there anything like 'minimizing stack overflow of an array' in C language?
有人告诉我,如何最大限度地减少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;
}
相关文章:
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 如何在数据库程序中添加"reduce the quantity of an item"功能?
- 如何修复" State Error (active) E0513 a value of type "const wchar_t *" cannot be assigned to an entity o
- "terminate called after throwing an instance of std::invalid_argument' what(): stoi ?"
- Divide et impera sum of the elements of an array bug
- 为什么"an inherited constructor is not a candidate for initialization from an expression of the same or
- 根据标准,究竟什么是"declaration of an object"
- C++中的继承,"...is an ambiguous base of ..."错误
- 如何修复"initial value of reference to non-const must be an lvalue?"
- 了解C++代码 - "Get the number of digits in an int"
- 为什么在使用dynamic_cast和模板时出现错误"A is an inaccessible base of B"?
- "a value of type " void (exeCallback::*)(int) " cannot be assigned to an entity of type " void (*)(
- "Allocating an object of abstract class type"错误,尽管所有函数都有实现
- 显示"terminate called after throwing an instance of 'std::bad_alloc'"时出错
- C++常见问题 32.8 "pass an object of a C++ class to/from a C function"问题
- C语言中有没有类似'minimizing stack overflow of an array'的东西?
- 抽象类和虚方法问题:"cannot allocate an object of abstract type"
- C++错误,显示创建链接列表调用"error LinkedList Interface is an inaccessable base of linkedlist"
- 为什么我会得到"cannot allocate an array of constant size 0"?
- 为什么我在投入析构函数时总是"terminate called after throwing an instance of..."?