Форум программистов, компьютерный форум, киберфорум
Наши страницы
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
shurik--1
0 / 0 / 0
Регистрация: 18.09.2011
Сообщений: 29
1

Объясните принцип работы стека

12.11.2014, 20:29. Просмотров 596. Ответов 1
Метки нет (Все метки)

Поясните пожалуйста подробно о работе стека.
С курсов по С++ выяснил, что память в программе написанной на С++ можно выделить 3 разными способами:
1. Глобальные переменные
2. Динамическое выделение память (т. н. куча)
3. Стек.
Стек используется при вызове функций. Сначала в него помещаются аргументы функции, потом адрес возврата к предыдущей функции, потом локальные переменные функции. Стек - это структура LIFO. Соответственно к нему применимы такие команды как PUSH, POP. Но вот здесь у меня и возникает вопрос. Допустим есть функция:
C++
1
2
3
4
5
6
int func()
{
int a=0, b=1, c=2;
int sum;
c=a;
}
Правильно ли я понимаю что сначала в стек заносятся переменные a, b, c, sum и после строчки int sum; на вершине стека лежит переменная sum? Как в строчке c=a; программа "добирается" до этих переменных? Она сначала сохраняет куда-то переменную sum? А если переменных в функции миллионы? Как программа будет работать допустим с самой первой переменной, которая будет лежать в самом начале стека? Получается, что надо сначала вытолкнуть все переменные которые были занесены после неё?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2014, 20:29
Ответы с готовыми решениями:

Объясните принцип работы
Добрый день. Возник ряд вопросов: не могу понять, каким образом реализован на...

Описать принцип работы
Здравствуйте. Есть программа на FASM'е, которая выводит частоту процессора....

принцип работы команды Add Ax, pole.
Готовлюсь к экзаменам по информатике. Все вопросы проработал, а этот не...

Объясните принцип работы
Здравствуйте. При написании программы, которая должна выводить целые числа в...

объясните принцип работы цикла : ?
объясните принцип работы цикла : ?

1
Mikl___
Автор FAQ
11892 / 6180 / 572
Регистрация: 11.11.2010
Сообщений: 11,193
13.11.2014, 03:45 2
shurik--1,
прочитай FAQ для раздела Assembler, MASM, TASM http://www.cyberforum.ru/cgi-bin/latex.cgi?\rightarrow "Что такое стек и для чего он нужен?"
у нас 4 локальные переменные, каждая размером 4 байта (тип int), адрес вершины стека находится в регистре ESP, для адресации к локальным переменным и параметрам переданным процедуре используется регистр EBP
Assembler
1
2
3
4
5
6
7
sub esp,16; отводим под локальные переменные 16 байт
mov ebp,esp; теперь EBP=ESP в ячейке памяти [ebp] находится адрес возврата из функции func
mov dword ptr [ebp+4],0; a=0
mov dword ptr [ebp+8],1; b=1
mov dword ptr [ebp+12],2; c=2
mov eax,[ebp+4]; передаем содержимое переменной а в регистр еах, то есть eax=a
mov [ebp+12],eax; передаем содержимое из регистра еах в переменную с, то есть c=eax теперь c=a
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2014, 03:45

Объясните принцип работы кода
Доброго дня. Объясните пожалуйста принцип работы кода построчно. public...

Объясните принцип работы нейросетей
я понял, что в нейроне есть активационная функция и веса синапсов. Вопрос...

Объясните принцип работы программы
Помогите, пожалуйста разобраться с тем как работает программа. Вот такое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru