¿Hay una diferencia fundamental entre malloc y HeapAlloc (aparte de la portabilidad)?

Tengo un código que, por varias razones, estoy tratando de transferir el tiempo de ejecución de C a uno que usa la API de Windows Heap. He encontrado un problema: si redirijo elmalloc/calloc/realloc/free llamadas aHeapAlloc/HeapReAlloc/HeapFree (conGetProcessHeap para el identificador), la memoria parece estar asignada correctamente (no se devuelve ningún puntero incorrecto y no se lanzan excepciones), pero la biblioteca que estoy transfiriendo dice "no se pudo asignar memoria" por alguna razón.

He intentado esto tanto con Microsoft CRT (que usa la API de Heap debajo) como con la biblioteca de tiempo de ejecución de otra compañía (que usa la API de memoria global debajo); el malloc para ambos funciona bien con la biblioteca, pero por alguna razón, usar la API de Heap directamente no funciona.

He comprobado que las asignaciones no son demasiado grandes (> = 0x7FFF8 bytes), y no lo son.

El único problema que se me ocurre es la alineación de la memoria; es ese el caso? O, aparte de eso, ¿existe una diferencia fundamental entre la API Heap y la API de memoria CRT de la que no soy consciente?

Si es así, ¿qué es? Y si no, entonces ¿por quéestático Microsoft CRT (incluido con Visual Studio) toma algunos pasos adicionales enmalloc/calloc antes de llamarHeapAlloc? Sospecho que hay una diferencia, pero no puedo pensar en lo que podría ser.

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta