![]() |
|
Модераторы: LSD |
![]()
|
|
| Farhod |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 25.3.2002 |
Что такое стек ?
спасибо |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago |
Очередь. Примерно тоже что и рожок с патронами для автомата - туда можно что-то засунуть для хранения, и можно вытащить, но только в той очерёдности в которой оно засунуто. Например у тебя есть три функции:
F1, F2, F3. функция F1 вызывает F2, а внутри F2 происходит вызов F3. Процессор обрабатывает код из F1, натыкается на F2, теперь всё что нужно было для работы с F1 (код и переменные) надо где-то запомнить, чтобы вернуться после обработки F2, так вот это всё и заталкивается в стек, далее управление передаётся F2. К моменту вызова F3, F2 тоже засовывается в стек. Теперь, когда F3 выполнена из стека достаётся F2, когда закончим с F2, достаётся F1... Правда с современными компилляторами и событийным программированием всё обстоит гораздо сложнее но стек всё равно очень интенсивно используется. У стека есть еще одно основополагающее свойство - заранее, на этапе разработки, никак нельзя узнать точно сколько именно памяти стека понадобиться. И на закуску пример переполнения стека на Дельфи: Procedure TForm1.Button1onclick(Sender:TObject); begin caption:='что-нибудь чтобы оптимизатор не удалил весь этот код'; Button1onclick(Sender); end; -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken |
Попробую доходчиво объяснить...
У тебя на кухне есть вентиляция... Может быть ты и не задумывался, но она идеально подходит для хранения всяких пиратских дисков и прочего барахла, которое нужно спрятать от посторонних глаз... Дальше... Представим, что к тебе ломятся менты, которые чудом узнали о твоей причастности к краху торгового центра в Америке, наводнению в Европе, шторме в Новороссийске, распространению детской порнографии и т.д. Надо заметать следы... Ты хватаешь компакты с порнухой и запихиваешь их в вентиляцию... Потом хватаешь планы торгового центра и полетные карты американских пилотов и запихиваешь их туда же... Под конец ты заваливаешь вентиляционную дырку своими старыми нестиранными носками (Типа чтобы ментовская овчарка не нашла)... Уставший и гордый за свою находчивость ты идешь открывать дверь... А на пороге вместо ментов стоит твой друган Серега... с прискорбной миной и просьбой дать порнуху посмотреть... Твои действия: извлечь из вентиляции носки, потом карты и планы, потом достать диски и отдать их Сереге... На вопрос о том, что это за хрень с вентиляцией, ты теперь можешь смело заявить что проверял на практике работу со стеком... Special thanks to: ][akep.ru -------------------- ![]() |
|||
|
||||
| MuToGeN |
|
|||
![]() Лесник ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4379 Регистрация: 15.8.2002 Где: Москва |
СУПЕР объяснение... раньше такого не слышал -------------------- Three pings for the token rings, Five pings for the UNIX machines, Hundred pings for the broken links, One special ping to check them all Through Simple Network Management Protocol! |
|||
|
||||
| FdX |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 13.8.2002 |
Мне тоже понравилось. Круто.
А если короче, то это область памяти для хранения данных. "Вентиляция" эта растет вниз (к младшим адресам). Если не ошибаюсь, принцип работы называется "Last In First Out" или тоже самое, тока наоборот. Тоесть, положил туда сначала переменную n1, потом n2. Пока не возьмешь n2, n1 взять не можешь (вообщето можешь, но по-умному).
Может, я не совсем понял, но помойму можно. Если писать на асме, можно ведь просто сосчитать. В на языке высокого уровня, вроде Дельфи и С++, помойму тоже можно но очень сложно. |
|||
|
||||
| Vit |
|
||||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago |
Нельзя! НАпример ты вызываешь функцию рекурсивно - например проходишь все каталоги файловой системы, откуда ты можешь заранее знать сколько раз функция будет вызвана из самой себя и запихнута в стек. И нет никакой разницы в языке программирования. Вот пример, конечно он глупый, но на этапе разработки оценить размер понадобившегося стека можно только приблизительно, и с очень малой долей вероятности может понадобиться сколь угодно большой стек.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
||||
|
|||||
| Blade |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 8.7.2002 |
Первый ответ kesh'у, который я хотел написать: "Ты случайно не являешься редактором журнала хакер?" После этого прочёл преписку special th... Всё равно классно
|
|||
|
||||
| Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва |
стек - область памяти, функционирующая по принципу LIFO, выделяемая программе для временного хранения адресов возврата при вызовах функций и процедур, передаваемых параметров и локальных переменных
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken |
Всем огромное спасибо за отзывы...
-------------------- ![]() |
|||
|
||||
![]()
|
| Правила раздела «Флейм» | |
|
|
Добро пожаловать в «Флейм». В разделе не действуют многие правила:
Строго запрещено:
Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт. Глас Винграда:
Глас Философии:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Флейм | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |