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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы, ... и память 
:(
    Опции темы
Kirill_2004_dcs
Дата 10.4.2004, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чем отличается динамическое распределение памяти от статического для массивов? И как это выглядит на практике..?
Cпасибо.
PM MAIL   Вверх
Stalk
Дата 10.4.2004, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Статическое: эта переменная всю свою жизнь будет иметь размер который ты ей определил
Динамическое: в любом месте проги ты можешь изменить размеры массива
PM MAIL ICQ   Вверх
oleg1973
Дата 11.4.2004, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



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


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Guest
Дата 11.4.2004, 08:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А еще статический массив постоянно сидит в памяти, а динамический массив жрет память когда это надо. И большие массивы обычно должны быть динамическими. smile.gif
  Вверх
sergeeff
Дата 11.4.2004, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Если ты объявляешь массив внутри функции - то место выделяется в сегменте данных STACK. Соответственно данные в таком массиве сохраняются и доступны только в самой этой функции и в нижлежащих функциях (т.е. тех, которые вызываются из этой функции), если ты им укажешь адрес этого массива.

Динамически память выделяется в особом разделе памяти, обычно именуемом "куча" (HEAP). Размер "кучи" - это вопрос не компилятора, а реализации "кучи" в библиотеке. Ну и называется она динамической именно потому, что размер памяти выделяется под массив не на этапе компиляции, а непосредственно на этапе выполнения.

Цитата
если массив вдруг изменил свой размер то ось быстренько меняет размер выделеной памяти под него
и если вдруг памяти чета не хватит то сбросит в своп что имхо тормозно

Для обычного С массива это совершенно не так! OS ничего быстренько ему не меняет.
PM MAIL   Вверх
oleg1973
Дата 11.4.2004, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



sergeeff
ну ну ну
спокойнее плиз smile.gif
для выделеня памяти есть минимум 2 метода
1) неинициалицированые данные в сегменте
2) функ типа GlobalAlloc

при статическом массиве может использоватся 1 способ, как менее трудоемкий
при динамическом он не прокатит и прога будет использовать GlobalAlloc
и если она не тупа то с GMEM_FIXED что дает нам выделение памяти в "несвопабельном" куске smile.gif
и при увеличении размера массива прога должна будет сделать GlobalReAlloc с указанием нового размера


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
sergeeff
Дата 12.4.2004, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все это красивые термины, на самом деле затуманивающие истинный смысл.

Либо статическое выделение, либо динамическое.
Статическое неинициализированное в одном сегменте памяти, инициализированное - в другом.

А то как уж реализована куча, так это на совести известных ребят из Калифорнии.

Вот и вся наука.
PM MAIL   Вверх
oleg1973
Дата 12.4.2004, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



хосподи причем тут куча?


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
sergeeff
Дата 12.4.2004, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Почитаем, например, http://www.osp.ru/pcworld/1998/06/180.htm:

Кучи (heaps) - это динамически распределяемые области данных. При порождении процесса ему предоставляется куча размером 1 Мбайт по умолчанию. Ее размер может изменяться параметром /HEAP при построении исполняемого модуля. Функции библиотеки времени исполнения компилятора (malloc(), free() и т. д.) используют возможности куч.


PM MAIL   Вверх
oleg1973
Дата 14.4.2004, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



1) памятью заведует операционка
2) если командир не прав смотри пункт первый

пусть даже оно там в стеке массивится
но при изменении размера с 1 до 5 мег че по чтвоему будет?
будет обрашение к оси за памятью


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
sergeeff
Дата 14.4.2004, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважаемый oleg1973!

Вернемся к истории вопроса. Наш коллега задал вопрос про отличия статической и динамической памяти. Он что-то спрашивал, про то, как это реализовано в Windows? Нет.

Все твои последние мне возражения - это нюансы реализации. Мир не замыкается только на Windows. Существуют сотни других различных OC, в которых успешно работают компиляторы C/C++, не говоря уже про различные embedded приложения, где может вообще никакой операционной системы не быть. Но абсолютно везде существует статическое выделение памяти. А вот динамическая память - это вопрос реализации. Может быть, а может и нет.

Считаю на том вопрос исчерпанным.

С почтением

PM MAIL   Вверх
oleg1973
Дата 16.4.2004, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



sergeeff
отмазался smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
FreshMeat
Дата 16.4.2004, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Kirill_2004_dcs @ 10.4.2004, 22:57)
Чем отличается динамическое распределение памяти от статического для массивов? И как это выглядит на практике..?

Топаем сюда и читаем умные буки
http://anatolix.naumen.ru/cppbooks.htm
Для начинающих рекомендуют Липпмана
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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