![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
mister2010 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 25.5.2010 Репутация: нет Всего: нет |
Например я написал такой код:
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью. То есть вот это
Когда же я написал:
Это означает что я объявил указатель под названием лук, который ссылается на область памяти по которой лежит что-то из класса, и этот указатель лук после того как сослался на область памяти по которой к примеру лежит переменная z из класса Box, указатель лук присваивает себе эту область памяти; 1)Где тут создается объект динамический, если это указатель на что-то из класса? 2)Почему, чтоб получить доступ динамически к классу нужно именно писать имя указателя который содержит в себе область памяти по которой лежит что-то из класса? |
||||||
|
|||||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
Физически в памяти это будет выглядет так ![]() Uploaded with ImageShack.us Т.е. тебе сначала нужно получить адрес в памяти размещенного обекта (эти самые 4-е байта), а уже затем по смещению получать доступ к данным класса (смещение расчитывается компилятором). -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
mister2010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 25.5.2010 Репутация: нет Всего: нет |
1)
Какой памяти, стека или кучи, получить указателем лук? 2)Чем отличается куча от стека? |
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
mister2010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 25.5.2010 Репутация: нет Всего: нет |
1)А чо так? Указатель находится в стеке ,а объект в куче?
Стек - это часть оп. памяти и куча это часть оп памяти? 2)
Указателем лук? Как объект буде называться,который мы получаем? 3) Где статически хранятся объекты а где динамические хранятся? 4)Последнее, что тревожит, если создать статически объект, он имеет имя, а динамически, какое имя имеет объект? |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
mister2010, не стоит путать динамическое и статическое время жизни. Статическое означает что инстанс (объект) живёт всё время жизни процесса(на стеке). Динамический же постоянно создаётся и уничтожается и он тоже может находиться на стеке, например, нестатические локальные переменные внутри функции.
Это сообщение отредактировал(а) Леопольд - 3.6.2010, 21:59 -------------------- вопросов больше чем ответов |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
На заметку. Помимо стека и кучи есть еще область статической памяти, в которую попадают константы, глобальные и статические переменные.
Добавлено через 3 минуты и 31 секунду >Стек - это часть оп. памяти и куча это часть оп памяти? Стек - эта такая "подвижная" штука. Например вызываете функцию, на стек попадают ее внутренние переменные и возможно параметры функции. Вызвали следующую - опять, но уже для нее. Вышли из второй функции - стек отмотался, вышли из первой - вернулся в исходное состояние. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
mister2010, когда программа запускается на выполнение, операционная система выделяет её ресурсы, строго отведённое количество (зависит от настроек и от ОС). Стек один из этих ресурсов (поэтому при бесконечной рекурсии возникает переполнение стека). Куча, грубо говоря, тоже выдаётся процессу но уже в рантайме, чем больше процесс выделяет памяти при помощи new, malloc и т.п. системных вызовов (т.е. процесс обращается к системе за ресурсом), тем большая куча ему выдаётся. Но, в рантайме (поэтому называют динамически) может обращаться не только за памятью. Можно, например, содавать потоки, которые на многоядерных процессорах будут выполняться на самом деле парралельно. Обращаться к файлам, всевозможным девайсам. В общем, грубо говоря, всё это сводится к "системным вызовам". Поэтому иногда просто необходимо знать как работает целевая ОС и какими возможностями обладает.
З.Ы. Вполне вероятно, что ОС может позволить увеличить стек в рантайме. Тут всё от неё зависит. Это сообщение отредактировал(а) Леопольд - 3.6.2010, 22:09 -------------------- вопросов больше чем ответов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
куча тоже не безразмерна... Ну и самое главное отличие кучи от стека не в этом.. даже просто вдумчивое прочтение названий даст ответ на это. |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
mister2010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 25.5.2010 Репутация: нет Всего: нет |
То есть то ,что в коде программы написано статически, при запуске файла екзе на компе, оперативной памятью выделяется часть памяти для хранения этого статического,эта память назыв. стек, а то что в программе написано операцией new , оперативная память выделяет тоже част ь памяти только её называют куча?
Это сообщение отредактировал(а) mister2010 - 3.6.2010, 22:15 |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Всё это зависит от ОС. Мне скоро предстоит под OSE программировать. Я пока не понял как там вообще с кучей дела обстоят. Пока что, у меня сложилось впечатление что размер кучи задаётся при компиляции... Хотя, насчёт главного отличия спорить не буду.
![]() Добавлено @ 22:17 ![]() Это сообщение отредактировал(а) Леопольд - 3.6.2010, 22:19 -------------------- вопросов больше чем ответов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
mister2010, нет
существуют три вида хранения: статическое - на протяжении выполнения программы автоматическое - на протяжении выполнения функционального блока динамическое - определяется клиентом "класически" программа обладает одним стеком, который служит для хранения автоматических переменных..суть в том что в стек можно добавлять только в конец и удалять с конца, поэтому соблюдается структурный порядок созднания /удаления переменных. "куча" - она беспорядочна по своей сути.. т.е. порядок создания и удаления в ней произвольно выбранный программистом, поэтому она "отведена" под хранение динамических объектов. Это сообщение отредактировал(а) mes - 3.6.2010, 22:26 |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Леопольд, она rw. И называется статической.
Добавлено через 1 минуту и 2 секунды
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Леопольд |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Видимо так и есть. Однако константы, строковые литералы и машинный код обычно лежат в ro.
З.Ы. У меня сейчас каша какая-то в голове с этой OSE... -------------------- вопросов больше чем ответов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |