Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: стек Добавлено: 19.12.06 20:43  

Автор вопроса:  ZoomerSD | ICQ: 148640473 
Добрый всем вечер.
В одной статье натолкнулся на понятие стек памяти. В принципе я знаю что стек есть область памяти отпределённного размера. Но можно ли как-нибудь поподробнее? какой памяти, оперативной, или Жёсткого диска? принципы записи, адресация и т.д.?

Ответить

  Ответы Всего ответов: 30  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 19.12.06 20:59
Стек - первый пришел, последний ушел.

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 19.12.06 20:59
первый пришел - последний ушел

push
pop

соответственно...

Задумываться над адресацией в басике чаще всего не приходится...

Память ессно оперативная, если её нехватает ессно будет своп на жесткий диск, но это уже не твоя забота, а ос.

Ответить

Номер ответа: 3
Автор ответа:
 W[4Fh]LF



Вопросов: 0
Ответов: 187
 Web-сайт: hunger.ru
 Профиль | | #3
Добавлено: 19.12.06 21:24
Лучше всего об этом расскажет любая книжка по ассемблеру, здесь тебе внятных ответов никто не даст, пробелы останутся с любом случае.

Ответить

Номер ответа: 4
Автор ответа:
 ENIX



ICQ: 238819245 

Вопросов: 9
Ответов: 76
 Профиль | | #4 Добавлено: 19.12.06 23:02
Добавлю что стэк применяется для хранения промежуточных данных, адресов подпрограм (векторов), значегий флаговых регистров (перед входом в подпрограмму).
pop
push только для семейсва Intel. К примеру в Моторолах командой PEA...

Ответить

Номер ответа: 5
Автор ответа:
 JMP



Вопросов: 6
Ответов: 171
 Профиль | | #5 Добавлено: 19.12.06 23:39
В принципе я знаю что стек есть область памяти отпределённного размера.

Не обязательно. Понятия стека применительно ко многим областям, и не только программирование.

Самый наглядный пример - обойма пистолета, - это стек.
патроны укладываются один за одним, и также извлекаются.
Правило как уже сказали - первый пришел, последний ушел.
Т.е. первый заряжаемый патрон в обойму, выйдет из обоймы последним.

Но можно ли как-нибудь поподробнее? какой памяти, оперативной, или Жёсткого диска?

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

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

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

Как вы видите с помощью стека, очень легко организовывается система возврата в исходное место.

Еще одно применение стека - вам надо обменять местами две переменные. Для того чтобы это сделать математически вам нужна еще одна переменная где вы времено будете хранить данные. С помощью стека это делается гораздо просче, вы ложите в стек переменную А потом Б а извлекаете наоборот, сперва А а потом Б. данные обменены.

На в самом деле применение стека этим не ограничивается.
Через стек в виндовс передаются параметры для АПИ функций. Т.е вызывающая АПИ программа складывает в стек параметры, а вызваная процедура считывает данные.
Здесь возникает вопрос - а как же тогда адрес возврата?
Все правильно адрес возврата запишется последним.
Вызваная АПИ , знает сколько параметров ее напихали в стек, и командами паралельного(т.е. обратится к стеку не как к стеку а как к обычным ячейкам памяти, зная что макушка стека указывает на адрес возврата, АПИ как бы перепрыгнет через это значение и считает параметры.) обращения к стеку извлекёт параметры. Таким образом указатель на стек не изменяется, и в то же время есть механизм передачи параметров. когда АПИ закончит свою работу она выполняет команду возврата, но не простую, а с учетом количества полученых параметров в стеке, т.е. как бы вычищает за собой стек. Это метод работы со стеком был взят от компиляторов паскаля, и в данный момент называется методом стандартного вызова процедур.

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


принципы записи, адресация и т.д.?

Помните столбик ?
Указатель стека = 900
записываем 4 байта в стек
Указатель стека = 900-4 =896
Извлекаем из стека байты и указатель на стек опять =900

адресация

Честно говоря очень плохо знаю ВБ, но точно знаю,
что честными способами вы к стеку не обратитесь, хотя вообщем то есть нестандартные способы использовать хитрости и особенности стека.

Ответить

Номер ответа: 6
Автор ответа:
 avdey



ICQ: 219571279 

Вопросов: 34
Ответов: 486
 Профиль | | #6 Добавлено: 20.12.06 13:49
ЗАЧОТ!!!!!!!!

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 20.12.06 20:09
на самом деле... достойный ответ!! автору респект!
И прошу заметить... совершенно бесплатно!!! Никаких речей о 20 WMZ! :-))

Ответить

Номер ответа: 8
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #8 Добавлено: 21.12.06 00:14
ссылку на ресурс! :)))))))))

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #9
Добавлено: 21.12.06 02:44
Мои бесплатные, большего объема и более качественного содержания, как технически, так и стилистически, посты в теме "Эээээ" уже в счет не идут? :)

Ответить

Номер ответа: 10
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 21.12.06 02:55
низачот, про переполнение стека не написано.

Ответить

Номер ответа: 11
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 21.12.06 02:58
Мои бесплатные, большего объема и более качественного содержания, как технически, так и стилистически, посты в теме "Эээээ" уже в счет не идут? :)

Да что твои, похоже что даже мои в счет не идут, а уж мои-то должны были бы - прогнозы, аналитика... Причем по очень актуальным темам...

Ответить

Номер ответа: 12
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #12 Добавлено: 21.12.06 09:04
посты в теме "Эээээ" уже в счет не идут?

Ну почему же не идут? На том свете все зачтется.. :-)))
А если серьезно, то на самом деле порадовал тот факт, что JMP не поленился и дал достаточно полный и исчерпывающий ответ(если конечно не передрал инфу с другого источника).. А не отписку типа: Ф ПОИСК!!! И вы не станете отрицать тот факт, что подобные ответы на нашем сайте стали достаточно большой редкостью, что ,само-собой, не добавляет ему посещаемости... :-((

Ответить

Номер ответа: 13
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #13 Добавлено: 21.12.06 09:35
Ну почему же не идут? На том свете все зачтется.. :-)))

Ну не надо так завидывать коллегам что ты не застал эээээ и не успел себе заработать пару сотен сообщений! :)

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 21.12.06 09:36
А если серьезно, то на самом деле порадовал тот факт, что JMP не поленился и дал достаточно полный и исчерпывающий ответ(если конечно не передрал инфу с другого источника).. А не отписку типа: Ф ПОИСК!!! И вы не станете отрицать тот факт, что подобные ответы на нашем сайте стали достаточно большой редкостью, что ,само-собой, не добавляет ему посещаемости... :-((

Если ты не заметил, то в последнее время на форуме от некоторых участниках (не будем показывать пальцами) начали даже появляться вопросы, содержащие уже в себе достаточно полные и исчерпывающие ответы!

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 21.12.06 10:17
начали даже появляться вопросы, содержащие уже в себе достаточно полные и исчерпывающие ответы!

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

З.Ы. А что это за тема: "Эээээ"? Что на самом деле я пропустил(кроме пары сотен баллов)? )))

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам