Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/14: Рейтинг темы: голосов - 14, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20

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

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

Студворк — интернет-сервис помощи студентам
Знаю, что задаю глупый вопрос поэтому прошу матом не ругаться палками не бить. Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2011, 00:24
Ответы с готовыми решениями:

По теории создания обьектов
Доброго времени суток. Возник вопрос, хочу понять. Помогите пожалуйста. 1.Например: MyClass a = new MyClass(); Создали обьект...

Чем воспользоваться для создания?
Только начал изучать C#, понял что .NET велик, но мы не сдаемся :) Привычно для меня взялся за довольно крупную программу вместо...

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

15
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
27.11.2011, 00:28
А что вы понимаете под динамическим распределением памяти?
0
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 00:37  [ТС]
Ну если создать переменную в глобальном пространстве имен(кажется так называется) переменная будет существовать в течении всего выполнения программы, а если создать в куче то я могу по среди выполнения программы ее удалить
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.11.2011, 00:45
junio, другой вопрос. Почему вы разделяете понятия "размещение в куче" и "динамическое выделение памяти"?
0
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 01:01  [ТС]
потому, что размещение в куче это запись данных в свободной памяти, а динамическое распределение это возможность выделить память под переменную посреди выполнения программы и отчистить выделенную память посреди выполнения. Возможно я не прав.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
27.11.2011, 01:13
junio, с динамическим выделением всё так. А вот про кучу я три раза перечитал, и хоть убей не понял, что вы сказали...

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

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

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

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

Использование кучи для небольших объектов зачастую не только не даст положительных результатов, но и может увеличить время работы с ними.
это копипаст отсюда
всем спасибо думаю эту тему можно закрывать
0
Заблокирован
27.11.2011, 05:33
Цитата Сообщение от junio Посмотреть сообщение
Знаю, что задаю глупый вопрос поэтому прошу матом не ругаться палками не бить. Я не понимаю в чем преимущества создания объектов и переменных в куче (кроме динамического распределения памяти).
Никаких преимуществ нет за исключением одного фактора - это время жизни объекта. Когда вы объявляете окальный объект, то его существование заканчивается, как только вы выходите за границу его видимости. Создав же объект в динамической памяти, он у вас будет жить, пока вы его саами не удалите.
Кроме того, используя динамическую память, вы можете "пересоздавать" этот объект столько траз, сколько вам нужно. Ежели вы используете объявление объекта в статической памяти, то вы не можете его "пересоздать". То есть ваши возможности ограничены.
1
0 / 0 / 0
Регистрация: 28.07.2011
Сообщений: 20
27.11.2011, 05:35  [ТС]
Сыроежка, спасибо
0
Заблокирован
27.11.2011, 05:41
Цитата Сообщение от junio Посмотреть сообщение
Сыроежка, спасибо
если что-то не понятно, то спрашивайте. Я постараюсь ответить на ваши вопросы. Вы должны хорошо различать виды памяти, которые предоставляются в распоряжение вашей программы. Это статическая память, свободная память, динамическая память и стековая память. Об этом хорошо написано в книге Герба Саттера "Решение сложных задач на С++".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.11.2011, 05:41
Помогаю со студенческими работами здесь

В чем разница между вариантами создания DataRow?
Есть у Троелсена пример // Добавить несколько строк в таблицу Inventory. DataRow carRow = inventoryTable.NewRow(); carRow =...

В чем разница между 2 способами создания строки?
Создание строки из составных частей, посредством сложения или через String.Format 1. Какой вариант вы используете? 2. Есть ли...

Поиск файла по дате меньшей, чем дата создания
Помогите новичку! Задача: есть папка, в которую ежедневно падает один файл. С помощью кода необходимо данные из файла с последней...

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

Чем пользоваться для создания бейджиков на иконке приложения
Всем здравствуйте. Подскажите, пожалуйста, есть ли какая-то универсальная библиотека для создания бейджиков (цифра на иконке приложения)...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru