Step 4 (S-7005)

From Stepik Wiki
Jump to: navigation, search

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

Step 4 (S-7005) 1.png

[00:00 - 00:16] давайте более подробно посмотрим на то как ведет себя с так вызовов при вызове функций рассмотрим следующий пример носить воду в которой вызывается функция foo от 3 параметров слева нарисован stock


[00:16 - 00:31] и также отмечено значение 2 счетчиков 1 счетчик показывает на вершину стека стать твоим то 2 счетчик указывает на начало данных которая соответствует текущей функции в тот момент когда


[00:31 - 00:48] мы еще не вызвали функцию почек указывают на начало данного функционала то есть текущая фаза это функционально когда мы начинаем вызывать функцию фу


[00:48 - 01:08] 1 делом мы складываем на стек аргументы этой функции речевом складываем их в обратном порядке то есть если в коде аргументы идут икс игрек и false то настройки они будут лежать наоборот сначала будет лежать false потом игорь потом икс


Step 4 (S-7005) 2.png

[01:08 - 01:25] следующим шагом мы складываем на стек адрес возврата это instruction поинтер в момент вызова это


Step 4 (S-7005) 3.png

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


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


Step 4 (S-7005) 4.png

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


[02:14 - 02:30] соответственно локальные переменные адресуются относительно счетчиков вниз поставь а аргументы функции адресуются в обратную сторону то есть


[02:30 - 02:45] функции известно суммарный размер вот этих 3 ячеек и она знает что вот в этом месте начинаются аргументы функции соответственно если


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


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


[03:23 - 03:40] перемножения 3 чисел ну предположим что действительно компилятор сначала посчитает произведения а потом когда он посчитает произведение он поможет это временное значение на столе


Step 4 (S-7005) 5.png

[03:40 - 03:57] далее будет вычислена все значения д и записано соответственно значение которое соответствует нибудь 5 42 но и вычислите значения используются условные выражения так как


Step 4 (S-7005) 6.png

[03:57 - 04:12] в качестве ц мы передали фолс то вычислите а где у нас 5 42 соответственно округляя вниз получаем


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


Step 4 (S-7005) 7.png

[04:29 - 04:48] в этот момент функцию выполнил все что хотела сделать завершает свою папку соответственно когда разрешать выполнение мы возвращаемся в предыдущую функцию то есть мы вытаскиваем содержимое регистров и восстанавливая instruction pointer pointing


[04:48 - 05:07] и получается что мы снова находимся функций данный функционирует момент уже забыли мы восстанавливается после вызова функции full для этого она записывает значение который вернулся солнце и фу


Step 4 (S-7005) 8.png

[05:07 - 05:26] в переменную икс то есть так начальное значение используется в дальнейшем то мы сначала изменяем переменную икс и потом просто избавляемся от всех дополнительных данных которые нам требовались только для того чтобы здесь он таким образом


Step 4 (S-7005) 9.png

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


[05:42 - 05:49] это часть которая использовалась для вузов она свободна