Allora allego questo test, per completezza, anche se non è servito a molto. Ha comunque evidenziato che xalloc e Heapxxx gestiscono la memoria in modi differenti.
codice:
#include <windows.h>
#include <stdio.h>
#define THE_BIG_ONE 10000
#define MEMORY_MANAGER 1
typedef struct
{
double x,y;
} paramStruct;
typedef struct
{
double x,y;
paramStruct p;
} myStruct;
int main (void)
{
HANDLE hHeap;
SIZE_T size;
myStruct * arr[THE_BIG_ONE];
paramStruct p[THE_BIG_ONE];
int i;
hHeap = GetProcessHeap();
for (;;)
{
for (i=0; i<THE_BIG_ONE; i++)
{
if (MEMORY_MANAGER) arr[i] = (myStruct*)calloc(1,sizeof(myStruct));
else arr[i] = (myStruct*)HeapAlloc(hHeap,0x08,sizeof(myStruct));
arr[i]->p = p[i];
}
for (i=0; i<THE_BIG_ONE; i++)
{
arr[i]->x = (double)time(0);
arr[i]->y = (double)time(0);
printf("%f %f\n",arr[i]->x,arr[i]->y);
}
for (i=0; i<THE_BIG_ONE; i++)
{
if (MEMORY_MANAGER) free(arr[i]);
else HeapFree(hHeap,HEAP_NO_SERIALIZE,arr[i]);
}
printf("Mem released\n");
//system("pause");
}
}
Cambiando il valore di MEMORY_MANAGER l'unica indicazione che ottengo è che allocare con xalloc riserva piu memoria di quella riservata con le Heapxxx. Però al momento del rilascio, la memoria viene restituita al sistema operativo (si vede da task manager).