Есть ли принципиальная разница между malloc и HeapAlloc (помимо переносимости)?

У меня есть код, который по разным причинам я пытаюсь перенести из среды выполнения C в ту, которая использует Windows Heap API. Я столкнулся с проблемой: если я перенаправляю вызовы malloc / calloc / realloc / free на HeapAlloc ] / HeapReAlloc / HeapFree GetProcessHeap для дескриптора) память, похоже, распределяется правильно (неверный указатель не возвращается и исключения не генерируются), но библиотека, которую я портирую, по какой-то причине сообщает, что «не удалось выделить память».

Я пробовал это как с Microsoft CRT (который использует Heap API внизу), так и с другой компанией » s библиотека времени выполнения (которая использует API глобальной памяти внизу); malloc для обоих из них хорошо работает с библиотекой, но по какой-то причине использование Heap API напрямую не работает.

Я проверил, что выделения не слишком велики (> = 0x7FFF8 байтов), и это не так.

Единственная проблема, о которой я могу думать, это выравнивание памяти; это так? Или, помимо этого, есть ли принципиальное различие между API кучи и API памяти CRT, о котором я не знаю?

Если да, то в чем оно? А если нет, то почему static Microsoft CRT (включенный в Visual Studio) выполняет некоторые дополнительные действия в malloc / calloc перед вызовом HeapAlloc ? Я подозреваю, что есть разница, но не могу представить, в чем она может быть.

Спасибо!

7
задан skaffman 3 January 2011 в 21:52
поделиться