Здравствуйте, Orlena, Вы писали:
O>Вопрос: используется HeapAlloc 1 раз, а переменная вызывается несколько раз, то HeapFree достаточно указать только один раз или...?
Безусловно только один. И не забыть это сделать.
А вообще HeapAlloc и HeapFree — низкоуровневые MS-ные аналоги обычных new и delete
Re: Применение HeapAlloc, HeapFree
От:
Аноним
Дата:
28.11.03 14:35
Оценка:
Здравствуйте, Orlena, Вы писали:
O>Вопрос: используется HeapAlloc 1 раз, а переменная вызывается несколько раз, то HeapFree достаточно указать только один раз или...?
На каждый вызов функции HeapAlloc -- соответствующий вызов функции HeapFree
Здраствуйте, Orlena. Вы писали:
O> Вопрос: используется HeapAlloc 1 раз, а переменная вызывается несколько O> раз, то HeapFree достаточно указать только один раз или...?
Что значит переменная вызывается?
Вообще HeapAlloc выделяет память, которую обязательно нужно освободить, вызвав HeapFree, т.е. каждый вызов HeapAlloc должен сопровождаться последующим HeapFree.
Здравствуйте, Иль, Вы писали:
Иль>Здравствуйте, Orlena, Вы писали:
O>>Вопрос: используется HeapAlloc 1 раз, а переменная вызывается несколько раз, то HeapFree достаточно указать только один раз или...?
Иль>Безусловно только один. И не забыть это сделать. Иль>А вообще HeapAlloc и HeapFree — низкоуровневые MS-ные аналоги обычных new и delete
если это С, то там нет new/delete и тогда лучше пользоваться С-шными malloc/free
Здравствуйте, Иль, Вы писали:
Иль>А вообще HeapAlloc и HeapFree — низкоуровневые MS-ные аналоги обычных new и delete
Ну тут есть еще такая мелочь как конструкторы и деструкторы new/delete и вызывают, а HeapAlloc/HeapFree нет.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Orlena, Вы писали:
O>Вопрос: используется HeapAlloc 1 раз, а переменная вызывается несколько раз, то HeapFree достаточно указать только один раз или...?
На каждый HeapAlloc должен быть один и только один HeapFree.
А new/delete не проще? А еще проще использовать смартпоинтеры.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, PM, Вы писали:
PM>Что значит переменная вызывается? PM>Вообще HeapAlloc выделяет память, которую обязательно нужно освободить, вызвав HeapFree, т.е. каждый вызов HeapAlloc должен сопровождаться последующим HeapFree.
-------------------------------------------------
Ситуация следующая (VC++). Исользуется, например, ф-ция
//---
void DrawImage( void )
{...
clrLineIntensImage = (COLORREF*)HeapAlloc( hCurProcess, HEAP_ZERO_MEMORY, sizeof(COLORREF)*iImageImgWidth + 5 );
...
}
в которой, как видно, есть HeapAlloc. Далее в программе вызывается
//---
DrawImage (); //1
...
clrLineIntensImage [] = ...;
...
DrawImage (); //2
,,,
HeapFree ( GetProcessHeap(), 0, clrLineIntensImage );
вызываю ф-цию DrawImage (); — два раза, то и Heap тоже два? Или Heap можно только в конце указать?
O>вызываю ф-цию DrawImage (); — два раза, то и Heap тоже два? Или Heap можно только в конце указать?
А функция DrawImage каждый раз вызывает HeapAlloc, или же при втором вызове она будет использовать память, оставшуюся от первого вызова? Если HeapAlloc вызывается каждый раз, то перед строкой "//2"
нужен еще один HeapFree(...).
Здравствуйте, Аноним, Вы писали:
===================== А>А функция DrawImage каждый раз вызывает HeapAlloc, или же при втором вызове она будет использовать память, оставшуюся от первого вызова? Если HeapAlloc вызывается каждый раз, то перед строкой "//2" А>нужен еще один HeapFree(...).
=====================
Понятно, значит в моей ситуации надо будет каждый раз указывать HeapFree... Интересно. Я сейчас погрузилась в описание построения виртуальной памяти. Скорее всего (поскольку у меня вин98) надо будет заменит ф-ции HeapAlloc, HeapFree на соответственно VirtualAlloc, VirtualFree... Чтож, будем надеяться что решение где-то рядом
Здравствуйте, Orlena, Вы писали:
O>Здравствуйте, Аноним, Вы писали: O>===================== А>>А функция DrawImage каждый раз вызывает HeapAlloc, или же при втором вызове она будет использовать память, оставшуюся от первого вызова? Если HeapAlloc вызывается каждый раз, то перед строкой "//2" А>>нужен еще один HeapFree(...). O>===================== O>Понятно, значит в моей ситуации надо будет каждый раз указывать HeapFree... Интересно. Я сейчас погрузилась в описание построения виртуальной памяти. Скорее всего (поскольку у меня вин98) надо будет заменит ф-ции HeapAlloc, HeapFree на соответственно VirtualAlloc, VirtualFree... Чтож, будем надеяться что решение где-то рядом
зачем VirtualAlloc ? это очень низкий уровень. Лучше malloc/free
Здравствуйте, Orlena, Вы писали:
O>Здравствуйте, Аноним, Вы писали: O>===================== А>>А функция DrawImage каждый раз вызывает HeapAlloc, или же при втором вызове она будет использовать память, оставшуюся от первого вызова? Если HeapAlloc вызывается каждый раз, то перед строкой "//2" А>>нужен еще один HeapFree(...). O>===================== O>Понятно, значит в моей ситуации надо будет каждый раз указывать HeapFree... Интересно. Я сейчас погрузилась в описание построения виртуальной памяти. Скорее всего (поскольку у меня вин98) надо будет заменит ф-ции HeapAlloc, HeapFree на соответственно VirtualAlloc, VirtualFree... Чтож, будем надеяться что решение где-то рядом
Эээ, а может всетаки malloc/free?
Не надо погружаться в описание VMM'а, зачем оно тебе? Считай что у тебя только две функции malloc и free.
типа твоего кода ....
ARRAY_ELEMNT_TYPE* g_array = 0;
long g_count = 0;
... prepare_array()
{
long count = 0;
// ... определяем сколько элементов нужноif ( g_array ) free(g_array);
g_array = malloc(sizeof(ARRAY_ELEMNT_TYPE)*count);
g_count = count;
// .... заполняем
}
//далее по коду ....
prepare_array();
// ... using
prepare_array();
// ... using
//и при завершении программыif ( g_array ) free (g_array);