Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
функции работы с памятью 07.08.01 13:42
Автор: ggg <ggg> Статус: Elderman
|
слышал что использовать LocalAlloc() не эффективно и лучше использовать malloc() или new
(типа она медленная)
кто-нибудь может пояснить ?
(так ли это и почему)
|
 |
[C++] У этих функций немного разное назначение. 07.08.01 15:17
Автор: Glory <Mr. Glory> Статус: Elderman
|
LocalAlloc() - это функция WinAPI которая выделяет в памяти указанное количество байт и возвращает тебе дескриптор локального хипа. Она оставлена в Win32 только для совместимости с 16-битным режимом (так как Win32 не разделяет локальный и глобальный хип).
malloc() - стандартная функция языка C для выделения памяти под указатель, new - оператор появившийся в C++, выполняющий ту же операцию.
Соответственно - если пишешь на C++ - используй new, когда это возможно, а когда тебе надо выделить определенное тобой количество байт, например, под нетипизированный указатель (void*), используй malloc().
Из функций API можешь использовать функции HeapCreate()/HeapAlloc()/HeapDestroy() - для работы с хипом, или VirtualAlloc() - для выделения памяти внутри твоего процесса, VirtualAllocEx() - внутри другого процеса и функции обратные им.
|
 |  |
это я знаю :) 07.08.01 15:32
Автор: ggg <ggg> Статус: Elderman
|
но любыми из них можно выделять память
вопрос был в том - как быстрее
теперь вопрос снят :)
я просто измерил время для каждой функции
оказалось что :
1) при выделении менее 1000 байт лучше всех LocalAlloc(LMEM_FIXED), хуже всех new (MSVC6.0)
2) более 1000 байт лучше всех malloc, хуже всех LocalAlloc
при выделении/освобождении в цикле по 1000000 раз на Duron600 sdram133 разница достигала 100 мс
правда не попробовал что получится если переопределить
operator new(unsigned size)
{
return ::LocalAlloc(LMEM_FIXED, size);
}
уже надоело :)
может кто попробует...
|
|
|