Я хотел попробовать более сложный пример выделения памяти с новым в объекте и выделения внутри него, но мне нужно было точно знать, когда произойдет переполнение стека.Поэтому решил попробовать этот пример.Я вызвал функцию foo()
из main()
и ожидал, что она выдаст ошибку переполнения стека.Это не так.В foo я увеличил размер массива еще на несколько нулей и добавил еще 40 таких объявлений в foo.Все еще не вылетал.
Я использую gcc версии 4.4.2 20091027 (Red Hat 4.4.2-7) (GCC).Разве выделение стека не должно превышать 1 МБ, чтобы вызвать ошибку переполнения стека?
void foo()
{
double x[100000000];
double x1[100000000];
double x2[100000000];
double x3[100000000];
double x4[100000000];
//...and many more
}
int main()
{
foo();
}
Скомпилировано как gcc -o test test.c