Partage
  • Partager sur Facebook
  • Partager sur Twitter

Allocation mémoire

    29 avril 2019 à 0:14:46

    Bonsoir tout le monde ,

    j'aimerais savoir le maximum d'allocation mémoire que je peux effectuer par exemple :

    tab = malloc(MAX*sizeof(int));


    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      29 avril 2019 à 0:46:33

      Salut,

      En théorie, tu peux alloué autant d'octets que de RAM disponible sur la bécane qui exécute le programme.

      Compte tenu qu'une bécane moderne possède entre 4 et 32 Go (1/3 des bécanes ont 8Go selon les stats steam), il y a peu de chance d'en manquer dans le cadre d'un programme maison...

      -
      Edité par drx 29 avril 2019 à 0:51:52

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        29 avril 2019 à 16:08:53

        Hello,

        Fais une boucle d'allocation jusqu'à ce que l'allocation échoue et tu aurais ta réponse ?


        #include <stdio.h>
        #include <stdlib.h>
        #include <stdbool.h>
        
        int main()
        {
            size_t STEP = 1024*1024;
            size_t sz = STEP;
        
            char *p = NULL;
            bool alloc_state = true;
            while ( alloc_state == true )
            {
                if ( ( p = malloc( sz*sizeof(*p) ) ) )
                {
                    free(p);
                    sz+=STEP;
                    printf("\n Allocation succeeded for %u MB of memory", sz*sizeof(*p)/(1024*1024) );
                }
        
                else
                {
                    alloc_state = false;
                    printf("\n malloc failed allocating %u MB of memory", (sz+STEP)*sizeof(*p)/(1024*1024) );
                }
            }
            return 0;
        }

        Pour ma part, je ne peux allouer plus de 1869 Mo. Il faudrait compiler en 64Bits pour aller plus loin je suppose.

        -
        Edité par aneonymous 29 avril 2019 à 16:09:55

        • Partager sur Facebook
        • Partager sur Twitter
          29 avril 2019 à 16:58:22

          Quand on travaille sur un système avec peu de RAM, il est une bonne pratique de tester la valeur de retour de malloc à chaque fois. Si ça retourne NULL, c'est qu'il n'a pas réussi à allouer.

          • Partager sur Facebook
          • Partager sur Twitter
            29 avril 2019 à 19:07:11

            aneonymous a écrit:

            Pour ma part, je ne peux allouer plus de 1869 Mo. Il faudrait compiler en 64Bits pour aller plus loin je suppose.

            En effet, en mode 32 bits, l'ensemble accessible à une application (code, dll, variables, ...) est limité à 3GB et à la mémoire disponible.
            Donc en mode 32bits, on a classiquement 2GB accessible.

            En mode 64 bits, il y a aussi une limite qui est de plusieurs milliers de GB (4095GB il me semble), donc c'est souvent la RAM totale accessible moins la RAM utilisée par le reste des applications qui doit être accessible.

            • Partager sur Facebook
            • Partager sur Twitter

            En recherche d'emploi.

              29 avril 2019 à 19:21:12

              Dalfab a écrit:

              aneonymous a écrit:

              Pour ma part, je ne peux allouer plus de 1869 Mo. Il faudrait compiler en 64Bits pour aller plus loin je suppose.

              En effet, en mode 32 bits, l'ensemble accessible à une application (code, dll, variables, ...) est limité à 3GB et à la mémoire disponible.
              Donc en mode 32bits, on a classiquement 2GB accessible.

              En mode 64 bits, il y a aussi une limite qui est de plusieurs milliers de GB (4095GB il me semble), donc c'est souvent la RAM totale accessible moins la RAM utilisée par le reste des applications qui doit être accessible.

              Sur un 32 bits, on ne peut manipuler que des registres de 32 bits, c'est à dire que pour toucher à la mémoire (jump, load, store), on ne peut indiquer que des nombres allant jusqu'à 2^32 ce qui vaut à peu près 4 GB (2^30 * 2^2 = 1 GB * 4).

              Sur un 64 bits, on peut accéder jusqu'à 2^60 * 2^4 = 16 EB (Exa Bytes . 1 EB = 2^30 GB)

              https://superuser.com/questions/593847/how-many-memory-addresses-can-we-get-with-a-32-bit-processor-and-1gb-ram



              -
              Edité par potterman28wxcv 29 avril 2019 à 19:21:26

              • Partager sur Facebook
              • Partager sur Twitter

              Allocation mémoire

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown