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.
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).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"); } }

Rispondi quotando