Buongiorno a tutti, sto facendo degli esperimenti con l'allocazione di grandi blocchi di memoria ma non mi tornano i conti. Vengo subito al codice...
Una struttura dati costituisce l'elemento base dell'allocazione:
typedef struct tag_Voxel {
size_t u, v, w;
_Bool b;
void* r;
} _Voxel;
Il suo allocatore:
_Voxel * AllocateFirstLevel(size_t n)
{
return (_Voxel*)malloc( sizeof(_Voxel) * n );
}
La chiamata:
size_t n = 360000000ull;
_Voxel *vl = AllocateFirstLevel(n);
I miei conti sarebbero questi:
Numero di elementi: 360 000 000 ( come assegnato alla chiamata)
Dimensione del singolo elemento: 40 bytes ( sizeof(_Voxel) )
Dimensione della allocazione: 14 400 000 000 bytes ( sizeof(_Voxel) * n )
Se un MB fosse 1.0E+006 byte, otterrei 14400 MB, se invece fosse 1024×1024 allora sarebbero 13733 MB. Mi sembrano comunque tanti.
Nella Gestione attività di Windows 8 il mio Tester.exe cresce solo di 26.9 MB dopo la l'allocazione.
Dove sbaglio i miei conteggi?