Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Освобождение динамической памяти...

386
19 сентября 2005 года
newcss
297 / / 05.04.2005
Не подскажите, есть ли функция, для освобождения динамической памяти сразу всей, которую использует программа?
Например программа выполниоа задачу и вызвала функцию для очищения динамической памяти ????
585
19 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by newcss
Не подскажите, есть ли функция, для освобождения динамической памяти сразу всей, которую использует программа?
Например программа выполниоа задачу и вызвала функцию для очищения динамической памяти ????


Вообще-то, это задача операционной системы.

299
19 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by honeybeer
Вообще-то, это задача операционной системы.


Я думаю чел хочет освободить память во время работы программы, и не отключая прогу сново заполнять...
Если б конешно он понимал немного, что если освободить все то он освободит и себя, и произойдет вылет, то не задавал таких вопросов.
ИМХО ему лень

for...
delete i[k];
}

У него в задаче память заполняется и ему лень удалять каждый элемент отдельно.

585
19 сентября 2005 года
honeybeer
297 / / 06.09.2004
Я вот думаю, что этому человеку необходимо срочно научиться выражать свои мысли более конкретно. Больше думаешь над самим вопросом, нежели над ответом.
243
19 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Расфлудились тут блин! Все правильно чел хочет чел сделать, так и надо делать. Просто он сам не поймет каким боком это сделать :)
Есть такая вещь как "куча".
Итак: GetProsessHeap() - куча которую используют new и malloc.
HeapCreate(...) - создаем новую кучу.
HeapDestroy(...) - уничтожаем созданную кучу (только не кучу процесса!).
Вся память выделенная в куче освобождается одним вызовом HeapDestroy(...), даже если она была потеряна. Т.е. это то, что хочет сделать чел.
243
19 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Гыг! Присмотрелся я к твоему посту и чего-то недопонял:
Цитата:
Originally posted by 3D Bob
ИМХО ему лень

for...
delete i[k];
}

У него в задаче память заполняется и ему лень удалять каждый элемент отдельно.


Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.
Но! Только для одного массива из всей кучи процесса.

299
19 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by pacific_7
Гыг! Присмотрелся я к твоему посту и чего-то недопонял:

Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.
Но! Только для одного массива из всей кучи процесса.


Ну вот опять меня никто не понел(
У меня под k просто подразумевался TList и нечто подобное...

243
19 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by 3D Bob
Ну вот опять меня никто не понел(
У меня под k просто подразумевался TList и нечто подобное...


Для этого и был введен delete - что бы можно было удалять объекты. Иначе в чем было бы его отличие от free()?

299
19 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by pacific_7
Для этого и был введен delete - что бы можно было удалять объекты. Иначе в чем было бы его отличие от free()?



Не понимаю к чему спор?
Я же и говорил
delete k....:D :)

3
19 сентября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by pacific_7

даже если она была потеряна.


Что бы это значило?

Цитата:
Originally posted by pacific_7

Вообще-то для динамических массивов память освобождается delete[] без указания размерности массива.

Для этого и был введен delete - что бы можно было удалять объекты.


В примере 3D Bob, он удаляет не массив объектов, а объекты, указатели на которые в массиве хранятся, так что delete[] в его примере не поможет.

243
19 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by 3D Bob
Не понимаю к чему спор?
Я же и говорил
delete k....:D :)


Меня колбасит :)

Цитата:
Originally posted by Green

Что бы это значило?


Возможно некорректно выразился. Подразумевалось, что если для какого либо объекта (переменной) была выделена память через HeapAlloc, и не освобождена через HeapFree, то при HeapDestroy она будет освобождена в любом случае.

Цитата:
Originally posted by Green
В примере 3D Bob, он удаляет не массив объектов, а объекты, указатели на которые в массиве хранятся, так что delete[] в его примере не поможет.


В общем - вы поняли, а главное что я понял.

585
20 сентября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by pacific_7

... если для какого либо объекта (переменной) была выделена память через HeapAlloc, и не освобождена через HeapFree, то при HeapDestroy она будет освобождена в любом случае.


Боюсь что HeapDestroy - не выход из положения. Если так халатно относится к менеджменту хипа, то ОС, пожалуй, вас опередит.

243
20 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by honeybeer
Боюсь что HeapDestroy - не выход из положения.


У меня нет слов, только MSDN. Обратите внимание на Remarks.

Цитата:
Originally posted by honeybeer

Если так халатно относится к менеджменту хипа, то ОС, пожалуй, вас опередит.


Интересно, как? Если у вас еще не завершен процесс?

386
20 сентября 2005 года
newcss
297 / / 05.04.2005
Цитата:
Originally posted by pacific_7
У меня нет слов, только MSDN. Обратите внимание на Remarks.

Интересно, как? Если у вас еще не завершен процесс?



MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...
Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch

И выходит так, что програ начинает работу все нормально, и потихоньку начинает кушать память...
Кушает и кушает... Хочется чтобы отработанную память возвращало в среду =). Я просто думал что есть какая-нить хитрая функция, которая позволяет... грубо говоря вернуть программу в момент ее запуска без выхода из проги.


Насчет очищения динамической памяти после завершения работы программы это я знаю =).

3
20 сентября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by newcss
MSDN и C++ Builder вещи на мой взгляд несовместимые =(


Пять баллов! :D
Я бы ещё добавил: "... когда пишешь под линукс"

Цитата:
Originally posted by newcss

Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch


Ну так покажи, как используешь.
Сдается мне, ты не юзаешь смарт-поинтеры.

299
20 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by newcss
MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...


Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.

3
20 сентября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by 3D Bob
Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.



Не принимай так близко к сердцу.
Человек видимо просто растроен, что "не все так гладко в датском королевстве".

246
20 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by newcss
MSDN и C++ Builder вещи на мой взгляд несовместимые =(, т.к. в MSDN написано одно, в билдере делается другое...


Ну-у-у-у Ты погорячился. Пример приведи где "в MSDN написано одно, в билдере делается другое"...

Цитата:
Originally posted by newcss

Я просто в программе использую
IHTMLDocument2
IHTMLWindow2
IHTMLFramesCollection2
IDispatch


1. Если используешь указатели на интерфейс, то надо делать Release(); или используй смарт-поинтеры ((С) Green )CComPtr, CComQIPtr из ATL или "родные" типа TComInterface.
2. Отсюда: http://forum.codenet.ru/showthread.php?s=&threadid=25567

 
Код:
HRESULT hr = pDoc2->get_Script(&pScript);
pScript->AddRef();

Ты получаешь интефейс, зачем ->AddRef()? get_Script наверняка вызывает AddRef(), у тебя счетчик ссылок инкрементируется дважды даже если делаешь Release()(полный код не видел) СОМ-ик остается залоченным и висит в памяти.
3. Приводи полный код, Я не спец. но народу-то здесь грамотного много помогут.

Цитата:
Originally posted by 3D Bob (the best)

Я просто упал со стула...
Мои дальнейшие комментарии к этому человеку и ответы на его вопросы пропадают.


Ты на свои посты посмотри ...

299
20 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by GIZMO
Ты на свои посты посмотри ...


Посмотрел.

246
20 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by 3D Bob
Посмотрел.


Со стула не упал?:)

299
20 сентября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by GIZMO
Со стула не упал?:)


Он даже сломался.

246
21 сентября 2005 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by 3D Bob
Он даже сломался.


Ну я к тому, что не надо так жестко, уровень то у всех разный. Может человек 4ето не допонимает, поэтому и спрашивает иногда глупости получаются. Ты же не сразу умным родился?

10
21 сентября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by GIZMO
Ты же не сразу умным родился?


Человек рождается умным, если только не олигофрен. А вот знания - дело наживное и зависит от правильного приложения природной лени.

243
21 сентября 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by Freeman
Человек рождается умным, если только не олигофрен. А вот знания - дело наживное и зависит от правильного приложения природной лени.


Можно подытожить ветку: "Лень - двигатель прогресса".

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог