IPB

Здравствуйте, гость ( Вход | Регистрация )

> Выделение динамической памяти, на С++
Nom@d
сообщение Dec 18 2006, 18:30
Сообщение #1


Пользователь
**

Группа: Posters
Сообщений: 139
Регистрация: 4.7.2006
Из: http://mobithings.ru
Пользователь №: 853



Каким образом выделить динамическую память массиву?


--------------------
Вернуться к началу страницы
 
+Цитировать сообщение
 
Создать новую тему
Ответов
Гость_Shweed_*
сообщение Aug 30 2007, 18:32
Сообщение #2





Guests






Ваууу интересная тема. smile.gif)) Динамика .. мммм...

Такс начнем:

Для выделения небольших массивов (и даже бальших) юзать malloc, realloc и следовательно освобождение памяти выполнять через free.

unsigned int size = 10;
char *s = (char*) malloc (size);

(Далее выполняем операции над строками!)
.....

free (s);

Минусы ... не вызывают конструкторы классов.

Если выделять память в стиле new, то очень удобно по сути вызывают конструкторы классов и др.

Минус ... нельзя перевыделить память .... (точнее довыделить).

есть одно предложение через reallloc .... но это чревато утечками памяти. Ибо эти функции включают всебя разные API функции для работы с памятью. (malloc и realloc - AllocMemory, а NEW использует HeapAlloc).

Так что вывод не пользоватсо!

А для выделения огромнеших массивов памяти лучше разабатывать свой класс для работы с динамичской памятью .. на основе VirtualAlloc. (сырцов в инете пално.)


Постом выше заметил такое ....

unsigned int size = 10;
char *s = (char*) malloc (size);

s = "строка."

ууууу неправильно! ))) ибо выделенная память потеряется. Так как s начнет указывать на другой по сути участок памяти. (будет утечка!)

PS
Аккуратно используйте динамику. Грамотно подчищайте все хвосты.
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_mix_*
сообщение Aug 31 2007, 09:02
Сообщение #3





Guests






Цитата(Shweed @ Aug 30 2007, 19:32) *
Для выделения небольших массивов (и даже бальших) юзать malloc, realloc и следовательно освобождение памяти выполнять через free.


Я чесно говоря не совсем понял, ты за malloc, realloc или против. Просто если уж работать в С++ (а не Си), то лучше использовать стиль программирования С++, который подрузамивает, коль уж нужна динамическая панять, используй new и delete. Но вообще использовать new и delete все же лучше тогда когда это реально нужно (ну там лабы делать "Работа с динамической памятью" rolleyes.gif ). А так лучше вообще по возможности избегать прямой работы с памятью и пользоватся дарами stl. Правда сам Б. Страуструп пишет в своей книге, мол не стоит верить чудесам, и если важна, скажем, производительность, проверить достаточно ли быстро работает stl и если достаточно то выбрать stl, иначе следует придумать более оптимальный вариант.

Цитата(Shweed @ Aug 30 2007, 19:32) *
Для выделения небольших массивов (и даже бальших) юзать malloc, realloc и следовательно освобождение памяти выполнять через free.

unsigned int size = 10;
char *s = (char*) malloc (size);

(Далее выполняем операции над строками!)
.....

free (s);

Минусы ... не вызывают конструкторы классов.

Чувак, реально незнал, пасиба за инфу
Вернуться к началу страницы
 
+Цитировать сообщение

Сообщений в этой теме


ОтветитьСоздать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 3rd July 2025 - 17:45