Что такое стек и куча? Можете доходчиво объяснить?

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Солнцеворот »

Коты :) , объясните, пожалуйста, что такое стек и что такое куча.
В интернете то и дело встречаются заметки вроде стек USB, стек Zigbee для STM32, а что это такое и как с этим работать не пишут. И вообще это один и тот же стек или у него есть несколько значений?

Яндекс по запросу стек дает такую картинку:
Изображение
Реклама
Реклама
bishop-strip
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение bishop-strip »

На мой взгляд хорошая статья по работе с памятью, здесь есть описание стека(не USB - это уже другое) и кучи, правда немного времени на понимание придеться убить....
http://www.rsdn.ru/article/cpp/ObjectsAndPointers.xml
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Psych »

Солнцеворот писал(а):Яндекс по запросу стек дает такую картинку:
Ахах а вы в картинках ответы ищете?))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Солнцеворот »

Картинку добавил для оформления )
Так стеки все-таки бывают разными? Под этим словом кроется несколько значений?
Что следует понимать под USB-стек или TCP/IP-стек?
Реклама
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Psych »

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

Куча-это тоже область памяти, но для динамического использования. К примеру: в процессе написания проги вы не знаете сколько отвести памяти ну там для чего-то, это становится известно только на этапе выполнения. Вы выделяете под это дело место в куче...потом это место освобождаете(!!!!). Говоря кратко: куча - это место в озу под данные размер которых заранее неизвестен.

Гугл вам даст более четкий ответ. Торопитесь, пока его не закрыли :)))
Реклама
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Satyr »

Жжжоте. он же не про стек в памяти спрашивает, а стек протоколов :))) :)))

Нечто, реализиующие несколько уровней из модели OSI http://ru.wikipedia.org/wiki/%D0%A1%D0% ... %D1%8C_OSI - и есть стек протоколов
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Солнцеворот »

Psych писал(а): Гугл вам даст более четкий ответ. Торопитесь, пока его не закрыли :)))
Фух! Еле успел.
Satyr писал(а): Нечто, реализиующие несколько уровней из модели OSI и есть стек протоколов
Во! Это то, что я хотел услышать. А это нечто чем может быть, например?
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение blackx »

Солнцеворот, куча тут совсем не причем, вы этим только с толку сбили людей :)

Под стеком протоколов понимается набор протоколов, требуемый для работы конкретного - USB, TCP, не важно. Как правило, каждый протокол может работать только "поверх" других определенных протоколов. То есть, для использования высокоуровнегого протокола придется организовать работу всех нижележащих протоколов, чтобы все работало как надо. Вот такой набор и называется стеком.

Например, протокол - HTTP, а стек протокола, это:

HTTP -> PPTP -> TCP -> IP -> Ethernet
Изображение only pure true norwegian blackx Изображение
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Psych »

Satyr писал(а):Жжжоте. он же не про стек в памяти спрашивает, а стек протоколов :))) :)))
Ой етить :oops:
Хотя есть сомнения что автор про стек протоколов спрашивает)))
Аватара пользователя
Satyr
Друг Кота
Сообщения: 7439
Зарегистрирован: Чт ноя 04, 2010 01:56:36
Откуда: г. Москва

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Satyr »

Psych писал(а): Хотя есть сомнения что автор про стек протоколов спрашивает)))
Да, куча тут не в кучу. Но дальше по тексту понятно, что вопрос про теплое и про мягкое -))))
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение misyachniy »

Стек это память используемая для сохранения адресов возврата из подпрограммы.
В некоторых процессорах в стек можно помещать аргументы для вызова подпрограмм.

Куча - это область памяти резервируемая для динамического выделения памяти в процессе работы программы.
Для работы с кучей используют функции "malloc()", "free()" и другие.

В общем случае доступ к куче произвольный, к стеку только к одному аргументу (вершина стека).
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение ut1wpr »

misyachniy писал(а):В общем случае доступ к куче произвольный, к стеку только к одному аргументу (вершина стека).
Ну очень в общем... Что мне мешает обращаться по смещению от этой самой верхушки? Безусловно, есть ограничение на длину смещения, но это уже реализация. Частный случай, но все же...
С уважением,
Виктор.
misyachniy
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение misyachniy »

ut1wpr писал(а):
misyachniy писал(а):В общем случае доступ к куче произвольный, к стеку только к одному аргументу (вершина стека).
Ну очень в общем... Что мне мешает обращаться по смещению от этой самой верхушки? Безусловно, есть ограничение на длину смещения, но это уже реализация. Частный случай, но все же...
Хотите - можете спорить.
Могу просто процитировать Википедию
Стек (англ. stack — стопка) — структура данных, представляющая из себя список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
или
In computer science, a stack is a particular kind of abstract data type or collection in which the principal (or only) operations on the collection are the addition of an entity to the collection, known as push and removal of an entity, known as pop.[1] The relation between the push and pop operations is such that the stack is a Last-In-First-Out (LIFO) data structure
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Psych »

misyachniy писал(а):Хотите - можете спорить.
Чисто жесткий в аппаратном стеке (хотя мб и нет). В программном (тобишь с выделением участка озу) часто присутствует регистр указателя верхушки стека, к которому есть доступ--ну, а с ним можно обращаться к любому участку. Да даже и без него можно--прямо обращаясь к адресам.
Аватара пользователя
Солнцеворот
Встал на лапы
Сообщения: 141
Зарегистрирован: Вт июн 03, 2008 01:39:47

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение Солнцеворот »

Мужики, пишите так, чтобы всем было понятно или натупляйте друг-друга в личке.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение ut1wpr »

misyachniy писал(а):Хотите - можете спорить.
Могу просто процитировать Википедию
Во превых, я сразу вам сказал, что мой пример не более чем частный случай. Говорить о стеке ВООБЩЕ - нонсенс.
Во вторых, ссылаться на википедии всех форматов в наше время просто неприлично. Есть более авторитетные источники.
Стек (англ. stack — стопка) — структура данных, представляющая из себя список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).
Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю.
А зачем вы мне это рассказываете? Я неплохо знаком с организациями стеков. Ужаснетесь, но я даже с FIFO знаком. :)
In computer science, a stack is a particular kind of abstract data type or collection in which the principal (or only) operations on the collection are the addition of an entity to the collection, known as push and removal of an entity, known as pop.[1] The relation between the push and pop operations is such that the stack is a Last-In-First-Out (LIFO) data structure
Pay your attention at a bolded, please...

А вопрошавшему просто рекомендую найти и почитать в литературе о стеках вообще и об их разновидностях. Сие не есть премудрость великая, которую скрывают от начинающих. Нужны три вещи: Гугл, желание найти и время. Вариант "спрошу-ка я на форуме, тут все всё знают" тоже может пройти, но отучит жить без форума. До первого затыка.
Последний раз редактировалось ut1wpr Пт июл 19, 2013 09:05:52, всего редактировалось 1 раз.
С уважением,
Виктор.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение ut1wpr »

Солнцеворот писал(а):Мужики, пишите так, чтобы всем было понятно или натупляйте друг-друга в личке.
Не говорите, ЧТО МНЕ ДЕЛАТЬ, и я не скажу вам, КУДА ВАМ ИДТИ. Правило номер 1 на форумах всех времен и народов. Давать подобные рекомендации - прерогатива модераторов. Насколько я заметил, вы не из них. И напоследок. "Мужики" возле пивного ларька тусуются. Я считал и считаю, что у меня здесь "коллеги". Но другие мнения не отрицаю. :)
С уважением,
Виктор.
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение YS »

Стек, как само по себе английское слово, относится к каким-то объектам, расположенным друг над другом, стопкой. От этого пляшем. Вообще, заниматься электроникой, не зная английского - бесперспективное дело.

Итак, стек - это что-то, сложенное стопкой. Если мы говорим об области памяти, то это структура, в которой нам доступен только самый верхний байт. Для работы с ней обычно выделяется две команды - push и pop. Первая кладет элемент данных на верхушку стека, вторая снимает с верхушки то, что там есть. Все. Да, как писали выше, можно это обходить и читать по смещению. Но к строгому определению работы со стеком это не имеет отношения.

Пример:

push 1

Стек:

1

push 10

Стек:

10
1

push 3

Стек:

3
10
1

pop REG - в регистре REG окажется 3. Если вызвать pop еще раз - в REG окажется 10. Еще раз - 1.

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

***

Если мы говорим о стеке протоколов, то это структура, в которой каждый уровень использует возможности нижележащего. Например, как уже писалось, HTTP передает команды и данные через PPTP, а PPTP пакует их и передает TCP, TCP - передает IP, а пакеты IP уже передаются по физической среде со своим кодированием. Получается, что протоколы тоже расположены один над другим, стопкой. И называются стеком - опять же, мы не можем отказаться от какого-то протокола посередине.

Ну а про кучу все уже сказали.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
xido
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Пт ноя 16, 2012 18:53:40

Re: Что такое стек и куча? Можете доходчиво объяснить?

Сообщение xido »

Солнцеворот писал(а):Коты :) , объясните, пожалуйста, что такое стек и что такое куча.
В интернете то и дело встречаются заметки вроде стек USB, стек Zigbee для STM32, а что это такое и как с этим работать не пишут. И вообще это один и тот же стек или у него есть несколько значений?

Яндекс по запросу стек дает такую картинку:
Изображение
У слова стек есть несколько значений - Вас интересует видимо стек как структура данных.
В этом случае это структура данных которая выглядит как стопка бумаги - элементы кладутся наверх стопки и снимаются с нее же, по принципу последний пришел - первый ушел (LIFO). Эта структура в том или ином виде обычно реализована "в железе" (мк или процессоре).

А куча, это кусок памяти который операционная система динамически (по запросу приложения) выделила для приложения. Приложение может делать с ней все что угодно - в том числе сделать в куче стек.
При чем под ОС можно понимать очень много чего.

Когда речь идет про usb и прочее железо то имеется в виду набор протоколов, которые обычно "располагаются" друг над другом - как стопка.

Вот тут по идее должна быть понятна связь между стеком (стопкой) и протоколами http://ru.wikipedia.org/wiki/ISO/OSI
Ответить

Вернуться в «Разные вопросы по МК»