Ça c’est purement un problème de capacité des machines.
Alors effectivement un code qui alloue 2 Go n’est pas non plus portable sur une machine qui n’a que 1 Go. Ok, tu as gagné : le C n’est pas « portable ».
Sinon sur un vrai système (c’est du quick&dirty) :
#include <stdlib.h>
#include <stdio.h>
#define N 250000000
int main (int argc, char **argv) {
int *a;
int i;
a = (int*)malloc (N * sizeof (int));
printf ("%u\n", a);
for (i = 0; i < N; i++)
a[i] = 0;
printf ("zeros\n");
for (i = 0; i == 0;);
return 0;
}
J’alloue donc ~1 Go, j’ai 1 Go de RAM :
nicolas:~% ./a.out
2078031880
mon clavier s’est blo... nan je rigole ^^ par contre ça swappe
zeros
Résultat du TOP :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23784 nicolas 20 0 955m 666m 172 R 100 66.6 0:19.75 a.out
Ça marche parce que mon système n’est pas en carton ^^, tant que j’alloue une quantité inférieure à la mémoire de RAM c’est bon...
D’ailleurs un spécialiste dans la salle pour me dire comment c’est possible ? Un malloc doit retourner une zone continue.
[^] # Re: Bonne nouvelle
Posté par nicolas . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.
Alors effectivement un code qui alloue 2 Go n’est pas non plus portable sur une machine qui n’a que 1 Go. Ok, tu as gagné : le C n’est pas « portable ».
Sinon sur un vrai système (c’est du quick&dirty) :
#include <stdlib.h>
#include <stdio.h>
#define N 250000000
int main (int argc, char **argv) {
int *a;
int i;
a = (int*)malloc (N * sizeof (int));
printf ("%u\n", a);
for (i = 0; i < N; i++)
a[i] = 0;
printf ("zeros\n");
for (i = 0; i == 0;);
return 0;
}
J’alloue donc ~1 Go, j’ai 1 Go de RAM :
nicolas:~% ./a.out
2078031880
mon clavier s’est blo... nan je rigole ^^ par contre ça swappe
zeros
Résultat du TOP :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23784 nicolas 20 0 955m 666m 172 R 100 66.6 0:19.75 a.out
Ça marche parce que mon système n’est pas en carton ^^, tant que j’alloue une quantité inférieure à la mémoire de RAM c’est bon...
D’ailleurs un spécialiste dans la salle pour me dire comment c’est possible ? Un malloc doit retourner une zone continue.