admin / 10.11.2018

Что такое стек

Слово стек

Слово стек английскими буквами(транслитом) — stek

Слово стек состоит из 4 букв: е к с т


Значения слова стек. Что такое стек?

Стек

Стек (англ. stack — стопка) — структура данных, представляющая собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

ru.wikipedia.org

Стека

Стека (от итал. stecca — палочка) — основной инструмент скульптора при лепке из глины, пластилина или других подобных по консистенции материалов. Также инструмент используется при создании керамических изделий и для работы в технике металлопластики.

ru.wikipedia.org

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

БСЭ. — 1969—1978

Стек вызовов

Стек вызовов (от англ. call stack; применительно к процессорам — просто «стек») — в теории вычислительных систем, LIFO-стек, хранящий информацию для возврата управления из подпрограмм (процедур)…

ru.wikipedia.org

Стек, Джордж

Его Высокопреосвященство Джордж Стек (англ. George Stack, 9.05.1946 г., Корк, Ирландия) — католический прелат, архиепископ Кардиффа. Джордж Стек родился 9 мая 1946 года в городе Корк, Ирландия. В 1960 году поступил в семинарию.

ru.wikipedia.org

Стек Bluetooth

Cтек Bluetooth (Bluetooth stack) относится к реализации стека протокола Bluetooth. Стеки Bluetooth можно условно разделить на две части: Widcomm был первым стеком Bluetooth для операционной системы Windows.

ru.wikipedia.org

Стек, Джессика

Джессика Стек (англ. Jessica Steck; родилась 6 августа 1978 года в Блумфонтейне, ЮАР) — южноафриканская теннисистка. Победительница 1 турнира WTA в паре. Победительница 1 юниорского турнира Большого шлема в парном разряде (US Open-1996).

ru.wikipedia.org

Стек (сетевые коммутаторы)

Стек или соединение сетевых коммутаторов в стек — это соединение двух или более коммутаторов, предназначенное для увеличения числа портов, при этом полученная группа идентифицируется остальными сетевыми устройствами как один коммутатор — имеет…

ru.wikipedia.org

Переполнение стека

В программном обеспечении переполнение стека (англ. stack overflow) возникает, когда в стеке вызовов хранится больше информации, чем он может держать. Обычно ёмкость стека задаётся при старте программы/потока.

ru.wikipedia.org

Парадигма: стек-ориентированная

Парадигма: стек-ориентированная Стек-ориентированная парадигма программирования использует для передачи параметров модель стека. Стек-ориентированный язык программирования оперирует одним или несколькими стеками и обычно использует префиксную или…

Энциклопедия языков программирования

Русский язык

Стек/.

Морфемно-орфографический словарь. — 2002


Примеры употребления слова стек

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


Раньше я боролся с последовательным импульсным методом, который я разработал.

Благодаря тому, что jedediah ссылается на эту статью , мне удалось перестроить коды и реализовать метод одновременного импульса с помощью итерационного решателя Projected-Gauss-Seidel (PGS), как описано Эрин Катто (упомянутое в ссылке на статью как [Catt05] ).

Итак, вот как это в настоящее время:

  1. Моделирование управляет двумерными вращающимися выпуклыми многоугольниками.

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

  3. Для разрешения столкновения используется метод одновременной импульсной коррекции. Он решается с помощью итеративного решателя (PGS-solver), как и в статье Эрин Кэтто. Коррекция ошибок осуществляется с помощью стабилизации Баумгарта (для этого вы можете ссылаться на любую бумагу), используя JV = beta / dt * overlap, J – якобиан для ограничений, V – матрица, содержащая скорости тел, бета – коррекция ошибок параметр лучше, чем <1, dt шаг времени, сделанный двигателем, и перекрытие, перекрытие между телами (истинное перекрытие, поэтому SKIN игнорируется).

Тем не менее, он все еще менее стабилен, чем я ожидал: s я пытался складывать шестиугольники (или квадраты, на самом деле не имеет значения), и даже с 4-5 из них они качались! Также обратите внимание, что я не ищу схему сна. Но я бы согласился, если у вас есть какая-то явная схема для обработки контактов отдыха.

Тем не менее, я был бы более чем счастлив, если бы у вас был способ лечения в целом (как непрерывное столкновение, а не явно как особое состояние).

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

Если вы хотите узнать параметры, которые я использовал:

  • Шестиугольники, сторона 50 (пиксели)

  • сила тяжести 2400 (пикселы / сек ^ 2)

  • шаг времени 1/60 (с)

  • бета-0,1

  • возврат 0 до 0,2

  • коэфф. трения 0,2

  • Итерация PGS 10

  • начальное разделение 10 (пиксели)

  • масса 1 (единица на данный момент неактуальна, i изменена скорость непосредственно <-импульсный метод)

  • инерция 1/1000

Заранее спасибо! Я очень ценю любую помощь от вас, ребята! 🙂

РЕДАКТИРОВАТЬ

В ответ на комментарий Холеского о теплом старте решателя и Баумгарта: я забыл упомянуть! Я сохраняю историю контактов и импульс, определенный на этом временном шаге, который будет использоваться в качестве первоначального предположения на следующем шаге.

Что касается Баумгарта, вот что на самом деле происходит в коде. Столкновение обнаруживается, когда самое близкое расстояние тела меньше, чем SKIN, что означает, что они на самом деле все еще разделены . Если в этот момент я использовал решатель PGS без Baumgarte, то только восстановление только 0 могло бы остановить тела, разделенные расстоянием ~ SKIN, в воздухе! Так что это неправильно, я хочу, чтобы тела касались друг друга. Поэтому я включаю Баумгарт, где его роль состоит в том, чтобы собрать тела вместе! Как ни странно, схема, предназначенная для раздвижения тела, становится полезной для обратного.

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

ОБНОВИТЬ

Поскольку стек качается влево и вправо, может быть, что-то не так с моей моделью трения?

Текущее ограничение трения: relative_tangential_velocity = 0

Solutions Collecting From Web of «Как сделать стек стабильным? Нужна помощь для явной схемы контактов для отдыха (2-мерная)»

Поддерживаете ли вы историю контактов от кадра до кадра, чтобы можно было начать работу с решателем?

Стек: что это такое и применение

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

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

то есть. если (проникновение> некоторый Эпсилон) стабилизация = стабилизацияФактор * (проникновение – некоторый Эпсилон)

Определение[править]

Стек (от англ. stack — стопка) — структура данных, представляющая из себя упорядоченный набор элементов, в которой добавление новых элементов и удаление существующих производится с одного конца, называемого вершиной стека. Притом первым из стека удаляется элемент, который был помещен туда последним, то есть в стеке реализуется стратегия «последним вошел — первым вышел» (last-in, first-out — LIFO). Примером стека в реальной жизни может являться стопка тарелок : когда мы хотим вытащить тарелку, мы должны снять все тарелки выше. Вернемся к описанию операций стека:

  • [math] \mathtt{empty} [/math] — проверка стека на наличие в нем элементов,
  • [math] \mathtt{push} [/math] (запись в стек) — операция вставки нового элемента,
  • [math] \mathtt{pop} [/math] (снятие со стека) — операция удаления нового элемента.

Реализации[править]

Для стека с [math]n[/math] элементами требуется [math]O(n)[/math] памяти, так как она нужна лишь для хранения самих элементов.

На массиве[править]

Перед реализацией стека выделим ключевые поля:

  • [math]\mathtt{s[1\dots n]} [/math] — массив, с помощью которого реализуется стек, способный вместить не более [math]n[/math] элементов,
  • [math]\mathtt{s.top}[/math] — индекс последнего помещенного в стек элемента.

Стек состоит из элементов [math]\mathtt {s[1\dots s.top]}[/math], где [math]\mathtt{s[1]}[/math] — элемент на дне стека, а [math]\mathtt{s[s.top]}[/math] — элемент на его вершине. Если [math]\mathtt{s.top = 0}[/math], то стек не содержит ни одного элемента и является пустым (англ.

empty). Протестировать стек на наличие в нем элементов можно с помощью операции — запроса [math] \mathtt{stackEmpty} [/math]. Если элемент снимается с пустого стека, говорят, что он опустошается (англ. underflow), что обычно приводит к ошибке. Если значение [math]\mathtt{s.top}[/math] больше [math]\mathtt{n}[/math], то стек переполняется (англ. overflow). (В представленном ниже псевдокоде возможное переполнение во внимание не принимается.)

Каждую операцию над стеком можно легко реализовать несколькими строками кода:

boolean empty(): return s.top == 0 function push(element : T): s.top = s.top + 1 s[s.top] = element T pop(): if empty() return error «underflow» else s.top = s.top — 1 return s[s.top + 1]

Как видно из псевдокода выше, все операции со стеком выполняются за [math]O(1)[/math].

Что такое стек?

На саморасширяющемся массиве[править]

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

Создадим вектор и определим операции стека на нём. В функции [math] \mathtt {push} [/math] Перед тем, как добавить новый элемент, будем проверять, не нужно ли расширить массив вдвое, а в [math] \mathtt {pop} [/math], перед тем, как изъять элемент из массива, — не нужно ли вдвое сузить размер вектора. Ниже приведён пример реализации на векторе.

Ключевые поля:

  • [math]\mathtt{s[0\dots n-1]}[/math] — старый массив, в котором хранится стек,
  • [math]\mathtt{newStack[0\dots newSize]}[/math] — временный массив, где хранятся элементы после перекопирования,
  • [math]\mathtt{head}[/math] — верхушка стека,
  • [math]\mathtt{capacity}[/math] — размер массива.

function push(element : T): if head == capacity — 1 T newStack[capacity * 2] for i = 0 to capacity — 1 newStack[i] = s[i] s = newStack capacity = capacity * 2 head++ s[head] = element T pop(): temp = s[head] head— if head < capacity / 4 T newStack[capacity / 2] for i = 0 to capacity / 4 — 1 newStack[i] = s[i] s = newStack capacity = capacity / 2 return temp

На списке[править]

Стек можно реализовать и на списке. Для этого необходимо создать список и операции работы стека на созданном списке. Ниже представлен пример реализации стека на односвязном списке. Стек будем «держать» за голову. Добавляться новые элементы посредством операции [math] \mathtt{push} [/math] будут перед головой, сами при этом становясь новой головой, а элементом для изъятия из стека с помощью [math] \mathtt{pop} [/math] будет текущая голова. После вызова функции [math] \mathtt{push} [/math] текущая голова уже станет старой и будет являться следующим элементом за добавленным, то есть ссылка на следующий элемент нового элемента будет указывать на старую голову. После вызова функции [math] \mathtt{pop} [/math] будет получена и возвращена информация, хранящаяся в текущей голове. Сама голова будет изъята из стека, а новой головой станет элемент, который следовал за изъятой головой.

Заведем конструктор вида

Ключевые поля:

  • [math]\mathtt{head.data}[/math] — значение в верхушке стека,
  • [math]\mathtt{head.next}[/math] — значение следующее за верхушкой стека.

function push(element : T): head = ListItem(head, element) T pop(): data = head.data head = head.next return data

В реализации на списке, кроме самих данных, хранятся указатели на следующие элементы, которых столько же, сколько и элементов, то есть, так же [math]\mathtt{n}[/math]. Стоит заметить, что стек требует [math]O(n)[/math] дополнительной памяти на указатели в списке.

См. также[править]

Источники информации[править]

Материал из Poker-wiki.ru, свободной энциклопедии по покеру.

Стек (англ. Stack) — все фишки, с которыми игрок в покер находится за игровым столом, и доступные ему для совершения ставок.

Слово стек

Размер стека игрока всегда измеряется относительно размера минимальных ставок, принятых за столом. Так, если блайнды за столом равны $1/$2, а стек игрока — $158, то его стек составляет 79 больших блайндов. От размера стека напрямую зависит стиль игры — чем больше стек, тем более аккуратно нужно играть.

Типы стеков

Глубокий стек (Deep Stack)

Глубоким считается стек, в котором более 200 блайндов. Игра за столами с глубокими стеками обычно более свободная, предполагаемые шансы высоки и позволяют чаще входить в игру и принимать ставки. На покерных телешоу чаще всего игроки играют глубокими стеками — это позволяет входить в игру даже с маргинальными руками, вследствие чего получаются очень интересные раздачи.

Полный стек

Полный стек обычно составляет 100 блайндов. Если стек превышает отметку 140-150 блайндов, он становится увеличенным. Если менее 80-90 — неполным (укороченным). Если игрок опускается до размера укороченного стека, следует докупиться до полного. Большинство стратегий рассчитаны именно на игру полным стеком.

Неполный стек

Неполным является стек, содержащий 30-70 блайндов. Играть оптимально с неполным стеком очень сложно — невозможно использовать ни преимущества короткого стека, ни преимущества полного. Для успешной игры, неполный стек необходимо докупать до полного стека. Если же человек долгое время играет неполным стеком, чаще всего это может означать его непрофессионализм в покере.

Короткий / малый стек (Short Stack)

В коротком стеке содержится 10-25 блайндов. Оптимальные стратегии игры коротким стеком существуют в определенных видах покера: Техасском Холдеме и Омахе. Короткими стеками играют очень агрессивно, имея целью пойти олл-ин в выгодных для этого ситуациях.

Ультракороткий стек

Ультракоротким считают стек, содержащий менее 10 блайндов. Оптимальная игра для него существует только в Техасском Холдеме и подразумевает олл-ин на префлопе. Также этот прием известен, как Пуш Склански-Чубукова.

См. также

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

Стек или стэк (англ. Stack) — это специально отведенная область оперативной памяти для хранения промежуточных данных во время выполнения программы. Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.

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

Важно помнить две вещи:

  1. Cтек растет в сторону уменьшения адреса в памяти.
  2. При использовании команд push и pop нужно быть осторожным, потому что если элемент был помещен в стек последним, то из стека он будет вытолкнут первым.

Пример работы со стеком

Рассмотрим пример работы со стеком на небольшой задаче. Допустим, нам необходимо сохранить значения регистров eax, ebx и edx в стеке, потом произвести с ними необходимые действия и вернуть исходные значения этих регистров. На ассемблере это будет выглядеть так:

push eax // Помещаем в стек значение регистра eax. // При этом указатель стека (esp) уменьшится на размер регистра eax, // т.е. на 4 байта (значение esp уменьшится на 4) push ebx // Аналогично, только в стек поместится значение регистра ebx push edx // То же самое, только в стек помещается значение регистра edx ……. // Тут производим какие-то действия с регистрами eax, ebx, edx так, // что значения этих регистров изменяются pop edx // Берем значение из стека (по адресу esp) и помещаем это значение в регистр edx.

// В edx окажется его исходное сохраненное значение.

Как видите если мы с помощью команды push edx помещали значение регистра edx в стек последним, то для возвращения значения регистра edx, команда pop edx должна идти первой. Так что действует принцип «последним зашел — первым вышел». После того, как значение получено из стека и помещено в регистр edx, указатель вершины стека (регистр esp) увеличивается на размер регистра edx, т.е. на 4.

pop ebx // Аналогично берем из стека значение по адресу esp и помещаем его в регистр ebx. // esp опять же увеличивается на 4. pop eax // Сами догадайтесь =)

Надеюсь основы работы стека из примера вам понятны. Вот еще один небольшой пример:

push eaxpop ebx

Как вы думаете, что получится после выполнения данного кода? Конечно же значение регистра eax поместится в регистр ebx! Почему? Все очень просто. Команда push eax поместит значение регистра eax в стек. Команда pop ebx возьмет из стека последнее помещенное в него значение и поместит его в регистр ebx. А что было помещено в стек последним? Значение регистра eax! Таким образом ebx станет равным eax. Ну теперь все понятно?

Стек в OllyDbg

Нам часто придется наблюдать операции программ со стеком, все вызовы процедур и функций выполняются с активным участием стека, поэтому, занимаясь крэкерством. Непосредственно увидеть оперирование программ со стеком можно в отладчикеOllyDbg, вот скриншот окна отладчика, на нём выделена область 9 (малиновым) — она и отображает стэк любой исследуемой программы.

.

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*