gpt4 book ai didi

c++ - C++ 标准对堆栈溢出有何规定?

转载 作者:可可西里 更新时间:2023-11-01 15:02:48 25 4
gpt4 key购买 nike

我查看了 C++0x 标准草案,据我所知,其中没有关于堆栈溢出的内容。搜索“stack overflow”没有结果,搜索“stack”我只得到了对 stack unwinding 和 std::stack 的引用。这是否意味着不能有符合 C++ 标准的实现,因为当内存被本地对象(如巨大的本地数组)耗尽时,没有允许处理错误的机制?

this question 的答案表明至少C标准没有提到堆栈溢出。

为了使问题具体化,考虑这个程序

// Program A
int identity(int a) {
if (a == 0)
return 0;
char hugeArray[1024 * 1024 * 1024]; // 1 GB
return identity(a - 1) + 1;
}
int main() {
return f(1024 * 1024 * 1024);
}

和这个程序

// program B
int main() {
return 1024 * 1024 * 1024;
}

我认为 C++ 标准不允许任何 C++ 实现在这两个程序上做一些明显不同的事情。实际上,程序 A 不会在任何现代机器上运行,因为它在堆栈上分配了 exabyte 的内存(想象一下该函数实际上使用了巨大的数组,因此编译器无法默默地删除它而不会产生不良影响)。 C++标准允许程序A失败吗?

编辑:问题不是标准是否应该定义堆栈溢出时发生的事情,问题是它说的什么,如果有的话。

最佳答案

我不确定这是否是您要查找的内容,但在 C++03 ISO 标准的附录 B 中有以下通知:

  1. Because computers are finite, C++ implementations are inevitably limited in the size of the programs they can successfully process. Every implementation shall document those limitations where known. This documentation may cite fixed limits where they exist, say how to compute variable limits as a function of available resources, or say that fixed limits do not exist or are unknown.
  2. The limits may constrain quantities that include those described below or others.

(我的重点)我认为这意味着编译器允许其中一个函数运行而另一个函数失败是完全合法的,前提是编译器说明存在哪些限制以及它们是如何从资源中计算出来的系统可用。

关于c++ - C++ 标准对堆栈溢出有何规定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com