![](/user_photo/70644__xXXN.png)
Магистратура Языки программирования С,C++ / Как выполняются программы на C++
.pdf![](/html/70644/137/html_MY9frwvI4Y.3JwD/htmlconvd-IlNmv_31x1.jpg)
Лекция 2. Как выполняются программы на C++
x = 1
y = 2
false
2
1
2
ret addr
registers
d = 5.42
h = 2
frame pointer
stack pointer
Вызов функции
int foo(int a, int b, bool c)
{
double d = a * b * 2.71; int h = c ? d : d / 2; return h;
} |
|
int main( ) |
|
{ |
|
int x = |
1; |
int y = |
2; |
x = foo |
(x, y, false); |
cout << |
x; |
return 0;
}
http://compscicenter.ru |
20/21 |
![](/html/70644/137/html_MY9frwvI4Y.3JwD/htmlconvd-IlNmv_32x1.jpg)
x = 1
y = 2
false
2
1
2
ret addr
registers
Лекция 2. Как выполняются программы на C++
Вызов функции
frame |
int foo(int a, |
int |
b, bool c) |
||
{ |
|
|
|
||
pointer |
|
|
|
||
double |
d = |
a * |
b * 2.71; |
||
|
|||||
|
int |
h = |
c ? |
d : d / 2; |
return h;
}
int main( )
{
|
int x = 1; |
|
|
int y = 2; |
|
stack |
x = foo (x, y, false); |
|
cout << x; |
||
pointer |
||
|
||
return 0; |
||
|
||
|
} |
|
|
|
http://compscicenter.ru |
20/21 |
![](/html/70644/137/html_MY9frwvI4Y.3JwD/htmlconvd-IlNmv_33x1.jpg)
Лекция 2. Как выполняются программы на C++
|
x |
= |
2 |
|
frame |
|
y |
= |
2 |
|
|
|
|
pointer |
|||
|
|
|
|
|
stack pointer
Вызов функции
int foo(int a, int b, bool c)
{
double d = a * b * 2.71; int h = c ? d : d / 2; return h;
} |
|
int main( ) |
|
{ |
|
int x = |
1; |
int y = |
2; |
x = foo |
(x, y, false); |
cout << |
x; |
return 0;
}
http://compscicenter.ru |
20/21 |
![](/html/70644/137/html_MY9frwvI4Y.3JwD/htmlconvd-IlNmv_34x1.jpg)
Лекция 2. Как выполняются программы на C++
Вызов функции
∙При вызове функции на стек складываются:
1.aргументы функции,
2.адрес возврата,
3.значение frame pointer и регистров процессора.
∙Кроме этого на стеке резервируется место под возвращаемое значение.
∙Параметры передаются в обратном порядке, что позволяет реализовать функции с переменным числом аргументов.
∙Адресация локальных переменных функции и аргументов функции происходит относительно frame pointer.
∙Конкретный процесс вызова зависит от используемых соглашений (cdecl, stdcall, fastcall, thiscall).
http://compscicenter.ru |
21/21 |