Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Магистратура Языки программирования С,C++ / Как выполняются программы на C++

.pdf
Скачиваний:
1
Добавлен:
17.03.2024
Размер:
190.66 Кб
Скачать

Лекция 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

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

Лекция 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

Лекция 2. Как выполняются программы на C++

Вызов функции

При вызове функции на стек складываются:

1.aргументы функции,

2.адрес возврата,

3.значение frame pointer и регистров процессора.

Кроме этого на стеке резервируется место под возвращаемое значение.

Параметры передаются в обратном порядке, что позволяет реализовать функции с переменным числом аргументов.

Адресация локальных переменных функции и аргументов функции происходит относительно frame pointer.

Конкретный процесс вызова зависит от используемых соглашений (cdecl, stdcall, fastcall, thiscall).

http://compscicenter.ru

21/21