Existe uma diferença fundamental entre malloc e HeapAlloc (além da portabilidade)?

Estou tendo um código que, por vários motivos, estou tentando portar do tempo de execução C para um que use a API de Heap do Windows. Eu encontrei um problema: se eu redirecionar omalloc/calloc/realloc/free chama paraHeapAlloc/HeapReAlloc/HeapFree (comGetProcessHeap para o identificador), a memória parece estar alocada corretamente (nenhum ponteiro incorreto retornado e nenhuma exceção lançada), mas a biblioteca que estou portando diz "falha ao alocar memória" por algum motivo.

Eu tentei isso com o Microsoft CRT (que usa a API Heap abaixo) e com a biblioteca de tempo de execução de outra empresa (que usa a Global Memory API por baixo); o malloc de ambos funciona bem com a biblioteca, mas, por algum motivo, o uso da API Heap diretamente não funciona.

Eu verifiquei que as alocações não são muito grandes (> = 0x7FFF8 bytes) e não são.

O único problema que consigo pensar é o alinhamento da memória; é esse o caso? Ou, além disso, existe uma diferença fundamental entre a API Heap e a API de memória CRT que eu não conheço?

Se assim for, o que é? E se não, então por que oestático O Microsoft CRT (incluído no Visual Studio) executa algumas etapas extras nomalloc/calloc antes de ligarHeapAlloc? Suspeito que haja uma diferença, mas não consigo pensar no que possa ser.

Obrigado!

questionAnswers(2)

yourAnswerToTheQuestion