Stackoverflow не происходит при попытке выяснить, выделяется ли память в стеке или куче - PullRequest
2 голосов
/ 16 июня 2011

Я хотел попробовать более сложный пример выделения памяти с новым в объекте и выделения внутри него, но мне нужно было точно знать, когда произойдет переполнение стека.Поэтому решил попробовать этот пример.Я вызвал функцию 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

Ответы [ 2 ]

5 голосов
/ 16 июня 2011

Сделайте так, чтобы foo вызывал сам себя рекурсивно, и с каждым вызовом получал некоторый прирост счетчика.Вы скоро получите свою ошибку.

1 голос
/ 16 июня 2011

Попробуйте скомпилировать без оптимизации с -o0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...