Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

[C++] Взятие адреса конструктора. Физическое время существование объекта. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как узнать, какой функции какой файл *.a соответсвует? http://www.cyberforum.ru/cpp/thread446938.html
Друзья! Работаю с mingw, вот там надо так: если, допустим, вызываешь API- функцию, то надо подключать соответствующую библиотеку (?), делается это ключом линкёра примерно так: -lwww файл Эта...
C++ Про деструктор и утечку памяти Доброе время суток. Вот что дано: #include <string> #include <vector> class Symbols { protected: void add(std::string str); // добавления символа virtual void inputData() = 0; //... http://www.cyberforum.ru/cpp/thread446749.html
Создать exe, запускающий exe C++
Говорю сразу: я ничего не смыслю в програмировании; зачем подался на такой форум? Надеюсь получить ответ на свой вопрос,упавая на то, что его реализация не такая сложная. У меня возникла...
Странное поведение bool C++
Помогал отлаживать код и мы наткнулись на удивительное. Кодер скрыл отображение варнингов в VS2010. Метод М1 не всегда возвращал значение типа bool. И потому в методе М2, вызывающем метод М1,...
C++ Как средствами BC 3,1 запросить свободное место на указанном жёстком диске? http://www.cyberforum.ru/cpp/thread444851.html
Извиняюсь, если создал лишнюю тему, но ничего по своей проблемке я вроде не заметил. Если что-то есть, поправьте. А вопрос в следующем: как средствами BC 3,1 запросить свободное место на указанном...
C++ Указания адреса функции Есть библиотека. Нужно чтобы функция в моей библиотеке указывала на функцию в чужой. Вот мой код: typedef int (WINAPI WJMP)(); extern "C" __declspec(dllexport) WJMP Test(void); *Test=... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17815 / 6025 / 388
Регистрация: 30.03.2009
Сообщений: 16,554
Записей в блоге: 26
17.02.2012, 09:35
Цитата Сообщение от AzaKendler Посмотреть сообщение
получается место под "объект" мы получили давно
Нет. Тут речь идёт только об автоматических объектах, а потому в исполняемом файле (в образе программы в памяти) этой памяти нет. Эта память есть ТОЛЬКО во время работы функции

C
1
2
3
4
5
6
7
8
9
int main (void)
{
  int x; // логически объект "x" родился в этой точке
  x = 0; // инициализация (как бы конструктор, но для простоты просто обнуление)
  int y; // логически объект "y" родился в этой точке
  y = 0;
  int z; // логически объект "y" родился в этой точке
  z = 0;
}
реально в процессе исполнения код "на пальцах будет таким"

Код
# Код процедуры main
main:
  выделим место в стеке размером 12 байт (сразу для всех трёх переменных)
  при работе со стеком у нас всегда есть некий указатель текущего окна в стеке
  (FP = frame pointer), через который в функции мы адресуемся ко всем переменным.
  Как правило стек растёт в сторону уменьшения адресов, а потому обращение
  ко всем объектам в стеке идёт с отрицательными смещениями

  # int x;
  # логическое рождение объекта "x". Технически оно не выражается ни в какие
  # машинные операции, т.к. память под все автоматические объекты процедуры
  # мы выделили скопом при входе в процедуру. Однако начиная с этого момента
  # память, зарезервированная под "x", начинает принадлежать только объекту "x",
  # и компилятор больше не имеет права использовать его под свои нужды (ну мало
  # ли там что ему понадобилось)

  # x = 0;
  код, который делает запись нуля по адресу FP - 4

  # int y;
  # тут всё аналогично "x"

  # y = 0;
  код, который делает запись нуля по адресу FP - 8

  # int z;
  # тут всё аналогично "x" и "y"

  # z = 0;
  код, который делает запись нуля по адресу FP - 12
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru