Step 3 (S-7003)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/538/step/3

Step 3 (S-7003) 1.png

[00:00 - 00:14] давайте разберем как работает так на следующем примере следовал меня схематично нарисован и вы можете заметить что я расположил но строка сверху а вершину стека снизу


[00:14 - 00:32] дело в том что наиболее распространенной архитектурой x 86 с так действительно растет то есть в этом направлении значит что максимальный адрес в памяти находится сверху а минимальный соответственно снизу


[00:32 - 00:48] мы будем смотреть как работает на свежем примере есть функция мышц и есть 2 функции которые из этой функции мы изначально настройки выделено памяти которая соответствует


[00:48 - 01:06] функций функция моим есть 1 локальная переменная переменная а я на хранится где то в этом сегменте после этого функции main вызывается функция foo


Step 3 (S-7003) 2.png

[01:06 - 01:22] функционал располагают свои данные сразу же после функцией функции вот так же есть локальная переменная локальной переменной но получается что в нашей схеме б располагается где то здесь располагается где то здесь


[01:22 - 01:42] после функции foo точнее из вас вызывается функция соответственно она располагает своей данный вот функции и на данный момент на стеки вызовов у нас уже 3 месяца после того как функционер закончить свою работу


Step 3 (S-7003) 3.png

[01:42 - 01:59] топоры которая занималась данный функционал освободиться и мы вернемся к солнцу после выхода из функции


Step 3 (S-7003) 4.png

[01:59 - 02:13] память которая занималась вам скажу точно также освободиться и мы вернемся к изначальной ситуации когда нас на стыке есть только данные функции мы после этого с функцией моим вызывается функция бы


Step 3 (S-7003) 5.png

[02:13 - 02:33] юзанный располагаются под функции мы не мы видим что функция пар заняла то же место которое до этого занималась можно посмотреть так как функция foo и функционала достаточно похожи тон можно предположить следует что


Step 3 (S-7003) 6.png

Step 3 (S-7003) 7.png

[02:33 - 02:51] место которое занимало переменная b теперь будет занят переменной c действительно скорее всего именно так и произойдет просто потому что количество локальных переменных и сигнатуры функций совпадают то есть здесь была некоторой переменной b


Step 3 (S-7003) 8.png

[02:51 - 03:08] которое равнялось 3 и когда мы вызываем функцию то переносить располагается в том же самом месте заметим что переменная c не принять резюме это значит что


Step 3 (S-7003) 9.png

[03:08 - 03:23] при вызове функции but переменная сигнал сложится на то место где лежал временами и в результате его значение будет равно это показывает почему важно нерезиновой переменной при


[03:23 - 03:42] потому что вы никак не можете повлиять на то значение которое будет присвоен этой переменной молчание и более того на это значение может повлиять например предыдущих месяца поэтому для того что ваша программа была себя


[03:42 - 03:50] стоит всегда инициализировать переменные в момент