Ho usato il seguente codice per scoprirlo ma ottengo sempre 1 come risposta. c'è qualcosa di sbagliato. GrazieQuanti GB possono allocare malloc per il programma
#include <stdio.h>
#include <stdlib.h>
int main(){
int mult = 0;
int chk =8;
do{
mult+=1;
int *p = (int*)malloc(1024*1024*1024*mult);
if(p==0){
chk =0;
}else{
free(p);
}
}while(chk !=0);
mult = mult -1;
printf("The number of gigs allocated is : %d\n",mult);
return 0;
}
Solo per aiutare, ho un sistema a 64 bit con Windows e Linux installato. Quindi, la logica di cui sopra è corretta anche se sto ottenendo solo 1 GB come risposta su un sistema a 64 bit?
Essa dipende dalla vostra o/s. Può dipendere dai limiti impostati dall'o/s, che può essere regolato da utenti opportunamente privilegiati. Hai provato a allocare 1023 * 1024 * 1024 * 2? –
Penso che questo codice rischia di soffrire di overflow di interi, se int è una variabile a 32 bit con segno. Prova a rendere le costanti non firmate a lungo (o non firmate long long se il tuo compilatore ce l'ha). – unwind
@unwind Questo ha funzionato per me. Sono stato in grado di superare i 500 GB prima di spegnerlo. (Mac OS X usa 'mmap()' oltre una certa dimensione.) Rendi il tuo commento una risposta in modo che io possa votare. – chrisaycock