2015-02-11 5 views
0

Может быть, мой вопрос не имеет значения, скорее всего, этого не произойдет, поскольку в стеке 1 МБ памяти.Что произойдет, если память стека будет заполнена

Но если память стека будет заполнена, что произойдет. Поскольку сборщик мусора не будет выполнять очистку для стека.

+2

Пожалуйста, проверьте название этого сайта. Это происходит, когда стек заполняется. –

ответ

1

Это довольно легко переполнение стека:

int* ptr = stackalloc int[4000000]; 

StackOverflowException будет происходить.

1

Я определенно не эксперт, но я предполагаю, что это будет StackOverflowException.

Я не думаю, что вы когда-либо заполнили весь стек 1 МБ.

+1

Это очень просто, если у вас есть метод, который (прямо или косвенно) вызывает себя и фактически не продвигает вперед. –

2

Когда стек заполняется, вы получаете исключение StackOverflowException.

Конечно, стек может заполнить, если ваш код имеет ошибку, которая вызывает рекурсию убегания, или если вы используете рекурсию для реализации алгоритма, который не подходит для рекурсии, например, для линейного поиска.

Вы можете очень легко проверить, что происходит с беглой рекурсией, как это:

static void Main(string[] args) 
{ 
    Main(args); 
} 
Смежные вопросы