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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
#1

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

27.11.2011, 00:24. Просмотров 1608. Ответов 15
Метки нет (Все метки)

Знаю, что задаю глупый вопрос поэтому прошу матом не ругаться палками не бить. Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 00:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем преймущество создания обьектов в куче? (C++):

В чем разница создания объекта? - C++
#include <iostream.h> #include <conio.h> class B {private: int b1,b2; public: B() {cout<<"Constructor B without...

Чем отличаются двапредставленных подхода создания линейного списка? - C++
Подскажите, пожалуйста, чем отличаются 2 подхода создания линейного списка 1 Вариант: ... struct Data { int key; };

В чем смысл создания шаблона с заранее известным передаваемым типом - C++
Видел шаблоны типа: template<int N> struct fact{ static const int v = fact<n-1>::v * n; }; Объясните мне, в чем смысл...

Удаление кучи в куче - C++
Доброго. У меня возник такой вопрос: имею я некую структуру struct inbase { int *data; }; в коде (не важно где) я...

Расположение данных в стеке и в куче - C++
Друзья, возник вопрос. Следующий код char length_buffer; ...заполнение length_buffer двоичным представлением целого числа 999... ...

Нужно выделить память в куче - C++
Работаю с довольно большим объемом данных, записанных матрицей. Для этого нужно выделить память в куче. правильно ли я это делаю: int...

15
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.11.2011, 00:28 #2
А что вы понимаете под динамическим распределением памяти?
0
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 00:37  [ТС] #3
Ну если создать переменную в глобальном пространстве имен(кажется так называется) переменная будет существовать в течении всего выполнения программы, а если создать в куче то я могу по среди выполнения программы ее удалить
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.11.2011, 00:45 #4
junio, другой вопрос. Почему вы разделяете понятия "размещение в куче" и "динамическое выделение памяти"?
0
junio
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 01:01  [ТС] #5
потому, что размещение в куче это запись данных в свободной памяти, а динамическое распределение это возможность выделить память под переменную посреди выполнения программы и отчистить выделенную память посреди выполнения. Возможно я не прав.
0
silent_1991
Эксперт С++
4986 / 3043 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.11.2011, 01:13 #6
junio, с динамическим выделением всё так. А вот про кучу я три раза перечитал, и хоть убей не понял, что вы сказали...

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

переменная не занимает место в оперативной памяти в течении выполнения программы (как при записи в стеке), а может быть удалена когда я захочу.
Я имел ввиду то что я переменную созданную динамически могу удалить в любой момент, а не то что она храниться не известно где.
В оперативной памяти просто есть возможность удалить при помощи команды delete посреди выполнения прграммы
Здесь я пропустил запятую после слова "памяти", а имел ввиду что динамические созданные переменные храниться в оперативной памяти(ответ на твой вопрос "А где же?"),но не в течении выполнения всей программы а пока я их не удалю
Так же в оперативной памяти. Возможность удалять объекты с помощью delete дает не оперативная память!
Я это прекрасно понимаю
0
BRcr
4009 / 2298 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
27.11.2011, 02:42 #12
Цитата Сообщение от junio Посмотреть сообщение
Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
А вы опишите два способа *создания объектов и переменных в куче*:
-- первый, использующий преимущество *динамического распределения памяти*;
-- и второй, не использующий данное преимущество.
Заодно изложите, что вы понимаете под heap.
И все сразу поймут, что вы имеете ввиду, в том числе и вы сами.
0
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 минут
Сделал то что нужно было сделать до создания этой темы порылся в интернете.
Так как размер стека ограничен, не следует хранить на нем даже небольшое количество больших объектов. В этом случае необходимо использовать кучу.

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

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

Потоки и выделение памяти в куче - C++
Подскажите, кто знает, какие есть тонкости при выделении памяти в куче (new) в потоках отличных от главного. У меня возникают исключения...

Указатели (Выделение памяти в куче) - C++
Чтобы создать в динамически распределяемой памяти переменную типа unsigned short необходимо написать следующее: unsigned short...

Как создать объект в новой куче? - C++
VisualStudio 2012, Win7x64Prof. Пробую выделить память в куче, а потом с помощью формы "Placement new" разместить в ней объект. ...

Передача параметра, выделенного в куче, в функцию - C++
Доброго времени суток. Возник такой вопрос. Пусть имеется некоторый класс, под объект которого выделяется память: SomeClass pClass =...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru