Continuo a sperimentare con C. Ho questo programma che ti permette di decidere quanta RAM vuoi mangiare.Sperimentare con C - Perché non è possibile allocare e utilizzare 2 GB di memoria?
char * eatRAM()
{
unsigned long long toEat;
unsigned long long i = 0;
float input;
char * pMemory = NULL;
int megaByte = 1048576;
puts("How much RAM do you want to eat? (in Mega Bytes)");
puts("NOTE: If you want to eat more RAM than you have available\nin your system, the program will crash");
printf("\n>> MB: ");
scanf("%f", &input);
toEat = (unsigned long long)(input * megaByte);
pMemory = malloc(toEat);
printf("\n\nEating in total: %llu Bytes\n", toEat);
puts("Check your task manager!\n");
if(pMemory != NULL)
{
printf("\n\nEating in total: %llu Bytes\n", toEat);
puts("Check your task manager!\n");
for(i; i < toEat; i++)
{
pMemory[i] = 'x';
}
}
else
{
puts("\nSeems like that amount of memory couldn't be allocated :(\n");
}
return pMemory;
}
domanda aggiornato:
Il fatto è che ... se entro per esempio 1024MB funziona, posso vedere nel task manager che sta usando 1GB di RAM. Anche se entro 1500MB funziona ..
Ma se entro 2048MB si dice
Sembra come quella quantità di memoria non poteva essere assegnato :(
o anche se inserisco 1756MB
Ricorda che sono nuovo di C, forse sto omettendo qualcosa di importante a come il sistema operativo mi consente di accedere alla memoria, quale potrebbe essere?
malloc probabilmente fallisce e restituisce null, controllare che –
si blocca perché si tenta di accedere alla memoria anche se l'allocazione non è riuscita, è necessario controllare 'pMemory! = NULL' prima di provare a utilizzarlo. Inoltre, non dovresti lanciare 'malloc()', in generale non lanciare mai da 'void *' a nessun altro puntatore. –
Quanta RAM ha il tuo computer? –