• [^] # Re: Bonne nouvelle

    Posté par . En réponse à la dépêche Que penser du rachat de Novell ?. Évalué à 2.

    Ç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.