Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Comment optimiser les performances d'un programme

Diminuer la place prise en mémoire ( vive )

    23 octobre 2006 à 15:53:23

    Bonjour :) ,


    Je cherche une/des option(s) ou même de conseils pour diminuer la place prise par un programme en mémoire ^^
    Exemple : si mon programme prends 6000ko en mémoire comment essayer de le réduire à 4000ko :)

    Je connaîs déja l'option : -s qui diminue fortement la taille de l'executable, en connaissez vous d'autres dans le style ? :o
    ( ne me dites pas d'aller voir là : Manuel de GCC car c'est déja fait mais il y a tellement d'options que je ne m'en sort pas ^^ )


    Merci ^^
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2006 à 16:28:10

      Le moyen le plus simple est la reutilisation de variable plus utiliser , ne pas oublier de liberer la memoire allouee dynamiquement.

      Revoir son algorythme pour qu' il utilise moins de memoire

      Le option de ton compilateur ne changerons pas trop la place pris en ram par ton programme , car c'est les variables declarer dans ton code qui prennent de la place en ram . Et gcc ne va pas modifier ton code !!
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2006 à 16:34:44

        Je le sais bien ^^

        Mais ou niveau code tout va bien, enfait, je n'ai pas de problème spécifique avec un de mes programmes mais je voudrais savoir comment optimiser au maximum son programme :)

        J'avais vu par exemple un spécialiste en programmation et en quelques ko de code, il faisait euh... je sais plus mais des trucs ou "nous"/moi aurions pris beaucoup plus de place en mêmoire ;)
        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2006 à 16:57:20

          Entièrement d'accord avec Ptidel !

          Sinon, tu peux essayer upx, mais sans garantie...
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2006 à 17:11:29

            Justement , en quelleque ligne de code il fait un algorythme bien plus performant !! La vitesse de ton programme dependra avant tout de ca que des optimisations du compilateur ou autre!
            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2006 à 17:35:34

              Oui, ça me fait penser aux FPS .kkgrieger, dont l'exe ne prenait que 96 ko o_O (et l'exe contenait les textures, models ect... o_O )
              • Partager sur Facebook
              • Partager sur Twitter
                24 octobre 2006 à 3:21:11

                Citation : Insomniak

                Oui, ça me fait penser aux FPS .kkgrieger, dont l'exe ne prenait que 96 ko o_O (et l'exe contenait les textures, models ect... o_O )



                L'exe ne contient pas de textures, il contient les fonctions permettant de créer des textures -> ce sont des textures procédurales. Avec un algorithme, ça dessine des textures.
                Par exemple pour une texture qui fait un dégradé du rouge vers le noir, ça peut se créer à l'aide d'un tableau en mémoire affecté de valeurs bien choisies à l'aide d'un algorithme.
                Plein de petites astuces comme ça, les sphères en 3D aussi ça peut se générer automatiquement de cette facçon, pas besoin d'un model.
                • Partager sur Facebook
                • Partager sur Twitter
                  24 octobre 2006 à 11:57:23

                  Citation : PianoPâriss

                  Je cherche une/des option(s) ou même de conseils pour diminuer la place prise par un programme en mémoire ^^


                  Il faut sortir le mapping (désolé, il faut lire la doc de gcc...) et regarder ce qui prend de la place. Le plus souvent, ce sont les chaines de caractères, et là, il n'y a pas grand chose à faire si la option -merge-strings a déjà été activée...

                  Autre zone souvent énorme : la zone d'initialisation des données. Eviter les données structurées (structures, tableaux) initialisées statiquement surtout si elles sont modifiables. Il faut mieux utiliser un memset() pour le plus gros et ajuster 'à la main' les valeurs de quelques variables.
                  Il peut y avoir des problèmes de portabilité avec memset().

                  C'est vraiment un problème la place ou c'est juste théorique ?

                  Il y a des options de compilation qui font gagner de la place, comme interdire l'inline ou le déroulage de boucles...

                  Il faut aussi factoriser son code au maximum (pas de répétition de code, mais une fonction, au besoin avec des paramètres si quelques éléments ou si le comportement diffèrent...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    24 octobre 2006 à 17:51:02

                    Ok, merci -ed- ;)

                    Je connaîssais pas "-merge-strings" ^^

                    Et tu me déconseille de mettre :
                    "-funroll-loops" ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 octobre 2006 à 20:40:11

                      Tu peux aussi passer les petites fonctions en inline.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 octobre 2006 à 23:33:15

                        Citation : Knarf2

                        Tu peux aussi passer les petites fonctions en inline.


                        Ben non, justement. (à moins qu'elle soit appelée une fois). A partir de 2/3 appels, une fonction classique fait gagner de la place...

                        Encore une fois, ne rien tenter avant d'avoir lu le mapping.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                          25 octobre 2006 à 8:51:36

                          Citation : HanLee

                          Citation : Insomniak

                          Oui, ça me fait penser aux FPS .kkgrieger, dont l'exe ne prenait que 96 ko o_O (et l'exe contenait les textures, models ect... o_O )



                          L'exe ne contient pas de textures, il contient les fonctions permettant de créer des textures -> ce sont des textures procédurales. Avec un algorithme, ça dessine des textures.
                          Par exemple pour une texture qui fait un dégradé du rouge vers le noir, ça peut se créer à l'aide d'un tableau en mémoire affecté de valeurs bien choisies à l'aide d'un algorithme.
                          Plein de petites astuces comme ça, les sphères en 3D aussi ça peut se générer automatiquement de cette facçon, pas besoin d'un model.



                          A ok, j'aurais pensé qu'ils avaient directement fait le GLuint dans l'exe, avec un tableau? Mais en fait non. :)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          [C] Comment optimiser les performances d'un programme

                          × 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