информационная безопасность
без паники и всерьез
 подробно о проекте
За кого нас держат?Атака на InternetГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 PHP2Shell начали эксплуатировать... 
 Четыре уязвимости Plex объединяют... 
 Вредоносный релиз LiteLLM 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] У этих функций немного разное назначение. 07.08.01 15:17  Число просмотров: 1168
Автор: Glory <Mr. Glory> Статус: Elderman
<"чистая" ссылка>
LocalAlloc() - это функция WinAPI которая выделяет в памяти указанное количество байт и возвращает тебе дескриптор локального хипа. Она оставлена в Win32 только для совместимости с 16-битным режимом (так как Win32 не разделяет локальный и глобальный хип).
malloc() - стандартная функция языка C для выделения памяти под указатель, new - оператор появившийся в C++, выполняющий ту же операцию.
Соответственно - если пишешь на C++ - используй new, когда это возможно, а когда тебе надо выделить определенное тобой количество байт, например, под нетипизированный указатель (void*), используй malloc().
Из функций API можешь использовать функции HeapCreate()/HeapAlloc()/HeapDestroy() - для работы с хипом, или VirtualAlloc() - для выделения памяти внутри твоего процесса, VirtualAllocEx() - внутри другого процеса и функции обратные им.
<programming>
функции работы с памятью 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);
}
уже надоело :)

может кто попробует...
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach