Allocation maximale de mémoire pour un programme
Bonjour,
Je suis entrain de faire un petit test pour savoir s'il y a une limite au niveau de l'allocation de mémoire dans un programme en C.
Il semble d'après mes recherches que les seules limites soient la RAM physique installée et si le système est en 32 ou 64 bits.
Mon PC sous Windows 7 est en 64 bits et mon compilateur (gcc) compile en 32 bits (je suppose car sizeof(int) = 4 octets chez moi).
Je peux donc théoriquement avoir 2^32 adresses mémoire disponible pour mon programme.
Voilà mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| int* tab;
int i;
const int mega = 1024*1024;
for (i=0; i<1000000; i++)
{
tab = (int*)malloc(mega*sizeof(int));
if (tab)
{
tab[0] = 50;
printf("i=%d\n", i);
}
}
printf("fin"); |
En sortie, je peux aller jusqu'à 480 sur mon PC ! Je suis très étonné, ca ne fait que 1Mo * 4 * 480 = 1920 Mo de mémoire alloué avant que malloc échoue...
Si je diminue la constante méga en mettant 1024 au lieu de 1024*1024, en sortie, mon compteur affiche 499 050, ce qui donne 1Ko * 4 * 499 050 = 1 996 200Ko = 1949 Mo
On est pas très loin du 1er test, mais pourquoi ne puis-je pas avoir plus de mémoire alors que j'ai 8 Go de RAM installé donc 4Go disponible ?
Merci à vous :)