Что такое “стек, перегружаются”?

Что такое "стек, перегружаются"? Или "стек перегружается"? (Так как я не знаю определение, я не уверен, является ли это исчисляемый или неисчислимый термин.)

5
задан talkaboutquality 13 February 2010 в 18:25
поделиться

6 ответов

Stack thrashing - это как heap thrashing, но на стеке.

Вот, теперь это объяснено.

О, вы хотите больше подробностей?

Если вы эмулируете процессор, основанный на стеке, на процессоре, который таковым не является, вы захламляете стек.

Если ваш C-код malloc'ит и free'ит каждую вторую строку кода, вы захламляете кучу.

Суть трэша стека как проблемы в том, что если вы профилировали свой код, то CPU тратит практически все свое время на выгрузки и вставки.

Для борьбы с кучей это malloc() и free() - ваши наиболее используемые функции #1 и #2.

Сейчас некоторые процессоры (например, Rockwell) оптимизированы для аппаратной работы с языком, основанным на стеке.

  • Внутренняя память, которая кэширует N килобайт стека внутри процессора
  • Мало регистров
  • Все инструкции связаны со стеком

Как ни странно, виртуальная машина Java - это модель, основанная на стеке.

Запуск действительно тупой реализации FORTH на аппаратном обеспечении x86 приведет к разрушению стека. Такую вещь можно написать после прочтения спецификации Forth, поэтому вы выдаете машинный код x86 для инструкций forth и НЕ оптимизируете его. Ребята из Forth, я прошу прощения, я знаю, что ваши импликации намного лучше.

Postscript тоже основан на стеках, что делает ранние принтеры postscript захватывающими: они имели ограниченный объем памяти и медленные процессоры: и работали на языке, разрушающем стек. Я уверен, что в такие вещи, как оригинальный принтер Apple Laserwriter, было вложено много усилий, чтобы сделать его работу лучше. У него был процессор Motorola 68000 с частотой (10 примерно) мегагерц и 1 Мб памяти IIRC.

Опять же, стековые трешеры.

Это помогло?

4
ответ дан 14 December 2019 в 01:07
поделиться

Я слышал термин «разбивание стека» в контексте защиты стека, но я думаю, что его чаще называют «разбиением стека». Разрушение стека означает использование любого вида уязвимостей стека (например, переполнение буфера ). Вот почему защита стека GCC называется SSP ( Stack-Smashing Protector ).

1
ответ дан 14 December 2019 в 01:07
поделиться

Ваш вопрос немного расплывчат, но в целом хорошей стратегией, которая в основном следует широте первой семантики при использовании того же объема памяти, что и поиск по глубине, является Итеративное углубление . Идея заключается в том, что сначала выполняется поиск по глубине, ограниченный 1 уровнем; если не удается найти решение, начните с нуля и ограничьте его 2 уровнями; если это не удается, попробуйте 3 уровня и так далее.

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

-121--1930383-

EDIT: К настоящему времени TortoitySVN также включает клиент командной строки, если вы решите установить его:

enter image description here

Я уже некоторое время использую SlikSVN , потому что "официальный" клиент командной строки под маркой CollabNet стоит за регистрацией и прочими вещами. Он все еще построен из тех же самых источников и имеет те же функции, ошибки и т.д., так что для всех намерений и целей он один и тот же.

-121--2558971-

Я никогда не сталкивался с этим термином, и ведущие хиты Google и Википедии не описывают его.

Однако это похоже на диск thrash , который является тяжелым неэффективным использованием диска. Это не применимо непосредственно к стеку - что не соответствует ни одному механическому. Возможно, это связано со сбоем страниц, который приведет к механически неэффективным отношениям. Или переполнение стека, исправленное каким-то дорогостоящим исполнительным средством/средством для ядра.

Какой-то контекст для термина поможет.

1
ответ дан 14 December 2019 в 01:07
поделиться

Однажды я услышал "trashing the stack" (без первого h) в смысле "повреждение стека", например, когда функция получает/помещает больше байт из/на стек, чем должна, путая указатель стека и делая невозможной последующую корректную работу другой функции.

Это может произойти, когда вы вызываете внешнюю функцию с неправильным соглашением о вызове (например, когда функция в dll является stdcall, но вы объявляете ее как cdecl), или когда вы вызываете вариативную функцию, такую как printf или scanf, передавая неправильную строку формата, так что она выдает больше/меньше байт, чем могла бы.

0
ответ дан 14 December 2019 в 01:07
поделиться

Я уверен, что этот термин полностью разговорный и не имеет точного значения. Есть ли у вас конкретная цитата или ссылка на то, где вы видели его использование?

Без какого-либо точного технического определения я предлагаю, чтобы это означало то, что, по мнению пользователя этого термина, означает. Я мог бы предположить, что это может быть применено к любому виду злоупотребления или неэффективного использования стека, но поскольку все, что обычно происходит при манипулировании стеком, - это перемещение указателя стека, было бы трудно определить, что будет составлять `` мусор '', который не был просто нормальное и желаемое поведение.

В многопоточном приложении, где каждый поток имеет свой собственный стек, переключение контекста также подразумевает быстрое переключение стеков, но это событие полностью и менее двусмысленно описывается термином «переброс задач».

1
ответ дан 14 December 2019 в 01:07
поделиться

Я видел, как этот термин используется в контексте Forth, где отсутствие доступа к стековому фрейму иногда требует чрезмерного использования манипуляций со стеком ("thrashing the stack"), чтобы добраться до определенных слов на вершине стека.

Кроме того, Этот глоссарий определяет его как "Частое расширение стека (переполнение) и сужение (недополнение)". Очевидно, что определение нуждается в дальнейшем объяснении. Возможно, кто-то более знакомый с Cray X1 сможет объяснить.

2
ответ дан 14 December 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: