Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2008, 12:19   #1
Mishka
 
Регистрация: 07.06.2008
Сообщений: 6
По умолчанию вопрос по стеку C++

Имеются 3 функции:
Код:
int foo() {  
  int a = random(10);  
  int b = random(10);  
  if (a < b) {  
    a++;  
  }  
  return a + b;   
}   
  
void bar() {  
  int a = random(10);  
  if (a > 3) {  
    int b = random(10);  
    float c = random(1.0);  
    print(b);  
    print(c);  
  }  
}   
  
void baz(int p) {  
  int i;  
  for (i = 0; i < 10; i++) {  
    long l = p * i;  
    print(l);  
  }  
  int j;   
  for (j = 0; j < 10; j++) {  
    double d = 1.5 * p;  
    print(d);  
  }  
}
Необходимо для каждой функции определить,какой объём памяти стека она требует.
Понятно что int a=... определяет на стеке переменную int.
А что происходит при выполнении a++ и return с точки зрения стека? (может ещё что-то пропустил)
Помогите разобраться
Mishka вне форума Ответить с цитированием
Старый 30.06.2008, 12:45   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

По одному машинному слову на переменную int (4 байта на 32-х разрядной машине, 2 байта на 16-ти разрядной), 4 байта на переменную float, 8 байт на переменную double и 4 - на переменную long плюс место для параметров вызываемых функций - random() принимает int, что такое print() Вы не уточняете. оператор ++ над элементарными типами (данный случай) со стеком не связан. Он же, когда является операторным методом класса будет "расходовать" стэк согласно своей реализации. Вложенные вызовы функций добавляют к "расходу" вызывающей функции плюс затраты на передачу адреса возврата, его размер зависит от модели памяти. return "отматывает" стэк назад - "убирает" из стэка все локальные переменные и адрес возврата, после чего передаёт управление по этому адресу.
---------------------
Забыл сразу добавить, что такое поведение операции return характерно для stdcall-функций. Для cdecl "отматываться" будет только адрес возврата и локальные переменные, а ответственность за "освобождение" параметров лежит на вызывающей функции.

Последний раз редактировалось B_N; 30.06.2008 в 13:17.
B_N вне форума Ответить с цитированием
Старый 30.06.2008, 20:35   #3
Mishka
 
Регистрация: 07.06.2008
Сообщений: 6
По умолчанию

Благодарю.
Mishka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
TObject *Sender sergei64_89 Общие вопросы C/C++ 1 06.06.2008 13:36
Вопрос по стеку на C++ Go6a Помощь студентам 2 06.04.2008 22:07