Я взглянул на черновой стандарт C ++ 0x, и, насколько я могу судить, в нем нет ничего о переполнении стека.Поиск «переполнения стека» не дает результатов, а поиск «стека» я получил только ссылки на разматывание стека и std :: stack.Означает ли это, что не может быть соответствующей реализации стандарта C ++, поскольку нет механизма, позволяющего обрабатывать ошибку, когда память исчерпывается локальным объектом, таким как огромный локальный массив?
Ответы на этот вопрос указывает, что по крайней мере в стандарте 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 не будет работать ни на одной современной машине, поскольку она выделяет избыточный объем памяти в стеке (представьте, что функция на самом деле использовала огромный массив, поэтому компилятор не может беззвучно удалить его без каких-либо вредных последствий).Позволяет ли стандарт C ++ программе А завершиться сбоем?
Редактировать: Вопрос не в том, должен ли стандарт определять, что происходит при переполнении стека, вопрос в том, что этоговорит, если что.