У меня есть код, который по разным причинам я пытаюсь перенести из среды выполнения 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
? Я подозреваю, что есть разница, но не могу представить, в чем она может быть.
Спасибо!