Utilicé el siguiente código para averiguarlo, pero siempre obtengo 1 como respuesta. Hay algo mal. Gracias¿Cuántos GB pueden asignar malloc para su programa?
#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 para ayudar, tengo un sistema de 64 bits con Windows y Linux instalados. Por lo tanto, ¿es correcta la lógica anterior aunque obtengo solo 1 gb como respuesta en un sistema de 64 bits?
Depende de su o/s. Puede depender de los límites establecidos por el o/s, que pueden ser ajustados por usuarios con privilegios apropiados. ¿Has intentado asignar 1023 * 1024 * 1024 * 2? –
Creo que este código corre el riesgo de sufrir un desbordamiento de enteros, si int es una variable de 32 bits con signo. Intente hacer que las constantes sean largas (o sin firmar por mucho tiempo si su compilador lo tiene). – unwind
@unwind Eso funcionó para mí. Pude pasar más de 500 GB antes de apagarlo. (Mac OS X usa 'mmap()' más allá de un cierto tamaño.) Haga una respuesta a su comentario para que yo pueda votar. – chrisaycock