Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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). А вообще все зависит от конкретной задачи. |