Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Выделение памяти


Автор: Nloge 5.12.2002, 12:51
Может меня кто-нибудь просветить о различиях и способах использования subj.
То есть нужно мне в программке выделить буфер на N байт (нет N мало... Пусть будет M байт!). Это можно сделать различными способами, а именно:
1. просто вызвать new
2. вызвать malloc (или _malloc_dbg)
3. вызвать GlobalAlloc
4. вызвать HeapAlloc
5. вызвать LocalAlloc
6. вызвать VirtualAlloc
и так далее (дополните что я пропустил...)
Так вот вопрос - в каких случаях и почему нужно использовать тот или иной метод.

Автор: Baa 5.12.2002, 19:33
Ты еще забыл CoTaskMemAlloc, HeapAlloc
А вместо malloc следует использовать new...
ИМХО, тебе лучше использовать VirtualAlloc...

Автор: dim 6.12.2002, 04:56
На самом деле не все так просто, как кажется на первый взглад и все зависит от конкретной задачи. GlobalAlloc и LocalAlloc лучше вообще не использовать. Теперь о других в большинстве случаев конешно предпочтительнее new для переносимости кода, кроме того если ты размещаешь классы в куче, то без new ты вообще не обойдешся. О malloc можно говорить только если ты используешь чистый C (а не C++), и опять же на первом месте переносимость. В специальных случаях хорош HeapAlloc, если у тебя несколько куч (например несколько потоков и каждый юзает свою кучу), кстати HeapAlloc, если ты даже используешь одну кучу имеет встроенный механизм блокировки (который выполняется в режиме ядра в отличие от библиотечных функций). О VirtualAlloc лучше подумать если будут манипуляции с достаточно большими обемами памяти за раз (больше 1M или 2M согласно MSDN). А вообще все зависит от конкретной задачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)