Чтобы отметить публичный запуск переполнения стека, какой самый короткий код вызывает переполнение стека? Любой язык приветствуется.
ETA: Просто чтобы прояснить этот вопрос, поскольку я случайный пользователь Scheme: хвостовой вызов "recursion" - это действительно итерация, и любое решение, которое может быть преобразовано в итеративное решение относительно тривиально приличным компилятором, не будет быть посчитанным. :-П
ETA2: я сейчас выбрал «лучший ответ»; см. этот пост для обоснования. Спасибо всем, кто внес свой вклад! :-)
источник
"
она загружает 79 копий числа 32 каждые два раза, а не две копии числа 1.Прочитайте эту строку и сделайте то, что она говорит дважды .
источник
Вы также можете попробовать это в C # .net
источник
Nemerle :
Это приводит к сбою компилятора с исключением StackOverflowException:
источник
Мой текущий лучший (в сборке x86):
в результате получается 3 байта объектного кода (
50 EB FD
). Для 16-битного кода это также возможно:что также приводит к 3 байта (
E8 FD FF
).источник
PIC18
PIC18 Ответ дается ТЗ приводит к следующим инструкциям (бинарными):
Однако только CALL выполнит переполнение стека:
Меньше, быстрее PIC18
Но RCALL (относительный вызов) еще меньше (не глобальная память, поэтому нет необходимости в дополнительных 2 байтах):
Таким образом, самая маленькая на PIC18 - это одна команда, 16 бит (два байта). Это займет 2 цикла инструкций на цикл. При 4 тактах на цикл инструкций вы получаете 8 тактов. PIC18 имеет 31 уровень стека, поэтому после 32-го цикла он переполняет стек за 256 тактов. На 64 МГц вы переполните стек за 4 микросекунды и 2 байта .
PIC16F5x (еще меньше и быстрее)
Тем не менее, серия PIC16F5x использует 12-битные инструкции:
Опять же, два цикла команд на цикл, 4 такта на инструкцию, поэтому 8 тактов на цикл.
Однако PIC16F5x имеет двухуровневый стек, поэтому в третьем цикле он будет переполнен в 24 инструкциях. При 20 МГц он будет переполнен за 1,2 микросекунды и 1,5 байта .
Intel 4004
Intel 4004 имеет 8 разрядную команду вызова подпрограммы:
Для любопытных, которые соответствуют ascii 'P'. С 3-уровневым стеком, который занимает 24 такта в общей сложности 32,4 микросекунды и один байт . (Если вы не разгоните свой 4004 - давай, ты знаешь, что хочешь.)
Это так же мало, как ответ befunge, но намного, намного быстрее, чем код befunge, работающий в современных интерпретаторах.
источник
C #:
источник
Гудок переполнен!
источник
Каждое задание нуждается в правильном инструменте. Познакомьтесь с языком переполнения SO , оптимизированным для переполнения стека:
источник
TeX:
Результаты в:
Латекс:
Результаты в:
источник
~
активен, его можно использовать вместо\a
. И я обнаружил код LaTeX совершенно случайно. :)Ассемблер Z-80 - в ячейке памяти 0x0000:
один байт - 0xC7 - бесконечный цикл переноса текущего ПК в стек и перехода к адресу 0x0000.
источник
По-английски:
источник
Другой пример PHP:
источник
Как насчет следующего в бейсике:
(Боюсь, у меня нет переводчика бейсика, так что это предположение).
источник
GOSUB
неGOTO
. Так как онRETURN
туда, откуда он был вызван, наверняка он использует стек?Мне понравилась куча ответов Коди, поэтому вот мой аналогичный вклад в C ++:
Ни в коем случае не кодовая игра в гольф, но все же что-нибудь для переполнения мета стека! :-П
источник
Вот мой вклад C, весом 18 символов:
Это намного сложнее оптимизировать! :-П
источник
Используя пакетный файл окна с именем "s.bat":
источник
Javascript
Чтобы урезать еще несколько персонажей и выкинуть себя из других магазинов программного обеспечения, давайте перейдем к:
источник
Groovy:
$ groovy stack.groovy:
источник
Пожалуйста, скажите мне, что означает аббревиатура " GNU ".
источник
Здесь надеемся на отсутствие хвостовой рекурсии!
источник
C - Это не самое короткое, но без рекурсии. Он также не переносим: он падает на Solaris, но некоторые реализации alloca () могут вернуть здесь ошибку (или вызвать malloc ()). Вызов printf () необходим.
источник
Perl в 12 символов:
bash в 10 символов (пробел в функции важен):
источник
попробуйте положить более 4 пирожков на один бургер. переполнение стека.
источник
Python :
В качестве альтернативы:
И если Python оптимизировал хвостовые вызовы ...:
источник
Я выбираю «лучший ответ» после этого поста. Но сначала я хотел бы отметить некоторые очень оригинальные вклады:
Как бы мне ни нравилось вышеизложенное, задача состоит в том, чтобы заняться гольф-кодом, и, если честно, респондентам я должен присудить «лучший ответ» за самый короткий код, который является записью Befunge; Я не верю, что кто-нибудь сможет победить это (хотя Конрад определенно пытался), поэтому поздравляю Патрика!
Видя большое количество решений по переполнению стека за рекурсией, я удивляюсь, что никто (на момент написания статьи) не использовал комбинатор Y (см. Эссе Дика Габриэля « Почему Y» для начинающих). У меня есть рекурсивное решение, которое использует комбинатор Y, а также подход аку f (f (x)). :-)
источник
Вот еще один интересный из Схемы:
источник
Ява
Немного короче версия решения Java.
источник
источник
3 байта:
Обновить
Согласно (старой?) Документации Intel (?) , Это также 3 байта:
источник