Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отличие операции с выделением памяти и без, Зачем нужно выделять память? 
V
    Опции темы
Lindemann66
  Дата 9.8.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinking...
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 2.8.2011
Где: Ульяновск

Репутация: нет
Всего: нет



Всем привет!

Не сочтите за глупость, но возник интересный вопрос, над которым давно думаю, а овтета нигде не находил

Вот нужно, допустим, создать массив из n элементов

Сделать это можно 2-мя способами

Код

int arr[n];

и 
Код

int *arr = new int[n];


Но в одном случае создание массива сопровождается выделением памяти, а в другом - без
В чём принципиальная разница?
Я понимаю, в Qt сразу написано - объекты QObject необходимо создавать с выделением памяти, чтобы не было проблем
Понятно, так и делаем. А тут как правильней?
--------------------
stay true
PM MAIL WWW ICQ   Вверх
spyswamp
Дата 9.8.2011, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



А если память _не_выделяется_, то куда данные будут записаны? ;)


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
Lindemann66
Дата 9.8.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinking...
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 2.8.2011
Где: Ульяновск

Репутация: нет
Всего: нет



Цитата(spyswamp @  9.8.2011,  16:04 Найти цитируемый пост)
А если память _не_выделяется_, то куда данные будут записаны? ;)

да, сглупил)
память в любом случае выделяетсяsmile 
вообще, я уже нашёл ответ на свой вопрос
можно сказать, вопрос решённый  smile 
--------------------
stay true
PM MAIL WWW ICQ   Вверх
borisbn
Дата 9.8.2011, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(Lindemann66 @  9.8.2011,  15:03 Найти цитируемый пост)
Я понимаю, в Qt сразу написано - объекты QObject необходимо создавать с выделением памяти, чтобы не было проблем

Достаточно много читал документации по Qt и эту строчку пропустил. Не подскажешь, где это они говорят ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
CasperSC
Дата 9.8.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Прикольно. Все в курсе, автор нашёл ответ, только никто так и не ответил. Тема пользы читающим не приносит к сожалению. Поделитесь пожалуйста информацией по вопросу.
PM MAIL   Вверх
Modul
Дата 9.8.2011, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(CasperSC @  9.8.2011,  18:56 Найти цитируемый пост)
Тема пользы читающим не приносит к сожалению.


Ну да, они учатся читать книжки.   smile 
И потом еще читать-уточнять.


Цитата(CasperSC @  9.8.2011,  18:56 Найти цитируемый пост)
Поделитесь пожалуйста информацией по вопросу.


1) память для массива выделена на стеке;
2) память для массива  выделена динамически.

Для понимания глубже нужны разделы в книге (по стеку и динамике), потом пару лет практики,
ну и ... понятно тогда.

--------------------
I'll be back !
PM MAIL   Вверх
pahan13
Дата 9.8.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 19.2.2010

Репутация: 1
Всего: 2



В первом случае
Код

int arr[n];

память которая была выделена под этот массив автоматически освободиться после того как программа выйдет за приделы блока кода(фигурных скобок) в которых этот массив был объявлен.
Например если создать таким образом массив в функции и в конце вернуть указатель на него. То этот указатель будет указывать не пойми на что короче. 

Во втором случае 
Код

int *arr = new int[n];

память должна быть освобождена с помощью оператора delete. 



Это сообщение отредактировал(а) pahan13 - 9.8.2011, 19:25
PM MAIL   Вверх
borisbn
Дата 9.8.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



CasperSChttp://www.maxi-pedia.com/what+is+heap+and+stack

Цитата(pahan13 @  9.8.2011,  19:24 Найти цитируемый пост)
память которая была выделена под этот массив автоматически освободиться после того как программа выйдет за приделы блока кода(фигурных скобок) в которых этот массив был объявлен.

отличие не только, вернее не столько, в этом (есть smart_ptr со своим конструктором/деструктором, которые следят за этим).
Размер памяти, которую можно выделить на стеке, имеет ряд ограничений (со стороны процессора, компилятора, etc), а размер памяти на куче имеет одно ограничение - размер памяти у одноимённого менеджера (обычно ограничение накладывается самой ОС).
Другими словами, выделить ГБ памяти на стеке не получится. Никак. А в куче - можно
Код

#define ONE_GIG ( 1024 * 1024 * 1024 )
char stack_mem[ ONE_GIG ]; // will fail while compile
char * heap_mem = new char[ ONE_GIG ]; // maybe work :)



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.