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

В чем преймущество создания обьектов в куче? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 00:24     В чем преймущество создания обьектов в куче? #1
Знаю, что задаю глупый вопрос поэтому прошу матом не ругаться палками не бить. Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
27.11.2011, 00:28     В чем преймущество создания обьектов в куче? #2
А что вы понимаете под динамическим распределением памяти?
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 00:37  [ТС]     В чем преймущество создания обьектов в куче? #3
Ну если создать переменную в глобальном пространстве имен(кажется так называется) переменная будет существовать в течении всего выполнения программы, а если создать в куче то я могу по среди выполнения программы ее удалить
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.11.2011, 00:45     В чем преймущество создания обьектов в куче? #4
junio, другой вопрос. Почему вы разделяете понятия "размещение в куче" и "динамическое выделение памяти"?
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 01:01  [ТС]     В чем преймущество создания обьектов в куче? #5
потому, что размещение в куче это запись данных в свободной памяти, а динамическое распределение это возможность выделить память под переменную посреди выполнения программы и отчистить выделенную память посреди выполнения. Возможно я не прав.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.11.2011, 01:13     В чем преймущество создания обьектов в куче? #6
junio, с динамическим выделением всё так. А вот про кучу я три раза перечитал, и хоть убей не понял, что вы сказали...

Добавлено через 34 секунды
junio, приведите пример кода, в котором, по-вашему, происходит размещение объекта в куче.
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 01:31  [ТС]     В чем преймущество создания обьектов в куче? #7
silent_1991, я просто плохо объясняю.Свободная память, это место куда записываются данные при динамическом распределении. Разделил я эти понятия потому что свободная память это место куда записаться данные, а динамическое распределения памяти это скорее способ записи(хотя слово способ подходит плохо, но я сейчас другого подобрать не могу), а преимуществом я это назвал потому, что переменная не занимает место в оперативной памяти в течении выполнения программы (как при записи в стеке), а может быть удалена когда я захочу. По крайней мере я так понимаю. А какие есть еще преимущества?
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
27.11.2011, 01:34     В чем преймущество создания обьектов в куче? #8
Цитата Сообщение от junio Посмотреть сообщение
не занимает место в оперативной памяти
А где же?
Цитата Сообщение от junio Посмотреть сообщение
а может быть удалена когда я захочу
Вы считаете, что в оперативной памяти объекты можно удалить только при завершении программы?
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 01:42  [ТС]     В чем преймущество создания обьектов в куче? #9
Chelioss, если создать в глобальных переменных то да.
если создать
C++
1
int *x=new int
таким способом то в любом месте программы при помощи команды delete
если переменную создать внутри функции то она удалиться при завершении функции.
А где же?
В оперативной памяти просто есть возможность удалить при помощи команды delete посреди выполнения прграммы
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
27.11.2011, 01:59     В чем преймущество создания обьектов в куче? #10
Статические и локальные объекты нельзя удалять с помощью delete. Значит по вашей логике они не находятся в оперативной памяти. А где они находятся? Так же в оперативной памяти. Возможность удалять объекты с помощью delete дает не оперативная память!
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 02:16  [ТС]     В чем преймущество создания обьектов в куче? #11
Chelioss, Ты меня не понял. Постараюсь по порядку

переменная не занимает место в оперативной памяти в течении выполнения программы (как при записи в стеке), а может быть удалена когда я захочу.
Я имел ввиду то что я переменную созданную динамически могу удалить в любой момент, а не то что она храниться не известно где.
В оперативной памяти просто есть возможность удалить при помощи команды delete посреди выполнения прграммы
Здесь я пропустил запятую после слова "памяти", а имел ввиду что динамические созданные переменные храниться в оперативной памяти(ответ на твой вопрос "А где же?"),но не в течении выполнения всей программы а пока я их не удалю
Так же в оперативной памяти. Возможность удалять объекты с помощью delete дает не оперативная память!
Я это прекрасно понимаю
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.11.2011, 02:42     В чем преймущество создания обьектов в куче? #12
Цитата Сообщение от junio Посмотреть сообщение
Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
А вы опишите два способа *создания объектов и переменных в куче*:
-- первый, использующий преимущество *динамического распределения памяти*;
-- и второй, не использующий данное преимущество.
Заодно изложите, что вы понимаете под heap.
И все сразу поймут, что вы имеете ввиду, в том числе и вы сами.
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 05:27  [ТС]     В чем преймущество создания обьектов в куче? #13
BRcr, я понимаю, что я имею ввиду,но согласен нужно было сразу дать пример
В каких случаях лучше использовать такой вариант
C++
1
int *x=new int
а в каких такой
C++
1
2
3
4
int x;
void main(){
...
}
?

Добавлено через 14 минут
Сделал то что нужно было сделать до создания этой темы порылся в интернете.
Так как размер стека ограничен, не следует хранить на нем даже небольшое количество больших объектов. В этом случае необходимо использовать кучу.

Если у класса запрещено копирование, или оно слишком долгое, то это является поводом хранения его в куче. В этом случае функциям можно передавать указатель на этот объект. Т. е. если объект мы передать не можем или не хотим в силу соображений о производительности программы.

Использование кучи для небольших объектов зачастую не только не даст положительных результатов, но и может увеличить время работы с ними.
это копипаст отсюда
всем спасибо думаю эту тему можно закрывать
Сыроежка
Заблокирован
27.11.2011, 05:33     В чем преймущество создания обьектов в куче? #14
Цитата Сообщение от junio Посмотреть сообщение
Знаю, что задаю глупый вопрос поэтому прошу матом не ругаться палками не бить. Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
Никаких преимуществ нет за исключением одного фактора - это время жизни объекта. Когда вы объявляете окальный объект, то его существование заканчивается, как только вы выходите за границу его видимости. Создав же объект в динамической памяти, он у вас будет жить, пока вы его саами не удалите.
Кроме того, используя динамическую память, вы можете "пересоздавать" этот объект столько траз, сколько вам нужно. Ежели вы используете объявление объекта в статической памяти, то вы не можете его "пересоздать". То есть ваши возможности ограничены.
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 05:35  [ТС]     В чем преймущество создания обьектов в куче? #15
Сыроежка, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 05:41     В чем преймущество создания обьектов в куче?
Еще ссылки по теме:

C++ Указатели (Выделение памяти в куче)
Чем отличаются двапредставленных подхода создания линейного списка? C++
C++ Удаление кучи в куче

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
27.11.2011, 05:41     В чем преймущество создания обьектов в куче? #16
Цитата Сообщение от junio Посмотреть сообщение
Сыроежка, спасибо
если что-то не понятно, то спрашивайте. Я постараюсь ответить на ваши вопросы. Вы должны хорошо различать виды памяти, которые предоставляются в распоряжение вашей программы. Это статическая память, свободная память, динамическая память и стековая память. Об этом хорошо написано в книге Герба Саттера "Решение сложных задач на С++".
Yandex
Объявления
27.11.2011, 05:41     В чем преймущество создания обьектов в куче?
Ответ Создать тему
Опции темы

Текущее время: 00:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru