Как преднамеренно вызвать исключение StackOverflowException без использования рекурсии? - PullRequest
7 голосов
/ 10 октября 2011

Мне сказали, что у каждого метода есть стек размером 1 МБ. Поэтому я предположил, что инициализация 256 целочисленных значений в одном методе вызовет исключение StackOverflowException. Я пробовал это в коде, но не было исключений.

Итак, как преднамеренно вызвать исключение StackOverflowException без использования рекурсии?

Ответы [ 4 ]

19 голосов
/ 10 октября 2011

использование

throw new StackOverflowException ();
7 голосов
/ 10 октября 2011

stackalloc, вероятно, самый простой способ (если вы хотите, чтобы среда выполнения выдавала ошибку, а не себя):

    unsafe void Boom()
    {
        int* data = stackalloc int[512 * 1024]; // 2MB
    }
5 голосов
/ 10 октября 2011

Я добавлю еще один метод: -)

unsafe struct FixedBufferExample
{
    public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}

Теперь эта структура 128 КБ :-) Если вы объявляете локальную переменную (метода, который не использует yield или асинхронный) типаFixedBufferExample он должен использовать 128 КБ стека.Вы можете использовать свой стек довольно быстро.

0 голосов
/ 10 октября 2011

Позвоните вашей собственности внутри вашей собственности (это рекурсия, но это так часто, я должен был упомянуть это):

int MyProperty
{
   set { MyProperty = value; }
}
...