информационная безопасность
без паники и всерьез
 подробно о проекте
Spanning Tree Protocol: недокументированное применениеЗа кого нас держат?Атака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Модульный ботнет от русских хакеров 
 Торвальдс и вайбтестеры 
 Атака на GitHub 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
функции работы с памятью 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