Télécharger le zip
Quand on definit des variables a l'interieur d'une fonction, elles sont créées et detruites a chaque fois qu'on appelle la fonction ??? Et si on veut que ces variables soit créées au début du programme et détruites la fin, comment on fait ?
Tu les déclare en début de prog et les détruit a la fin ...
Vachement court le tuto ... Sinon g du mal a comprendre comment t arrive a généraliser le fait qu il faut des arbres et pas des listes pour les IA, chaque algo ayant des applications très spécifiques ...
Pour répondre à Galmiza... si tu veux déclarer des variables dans une foction et que cette MEME variable soit réutilisable dans le prochain appel de cette fonction (et tout au long du programme), il faut que tu la déclare en static. exemple: void toto() { static int a; } void main() { toto(); // crée la variable toto(); // ne fait rien puisque la variable est déjà créée } voila, si ca peut te servir...
Ok merci bigzooloo et Cyberboy2054 ! Mais ce qui m'étonne c'est que la variable ne soit pas dans le corps de la fonction. En gros, quand le programme est lancé, la fonction est copiee dans la RAM et il n'y a qu'a reserver un espace mémoire pour la variable, ca évite d'avoir a allouer de la memoire et la desallouer sans arret... Mais bon, c'est vrai que quand on a un double[1024*1024*1024] dans la fonction, vaut mieux pas que la fonction monopolise tout le temps la RAM. (dans ce cas, je fais un new .... delete de toutes facons) Si j'ai bien compris, mettre un static devant une variable accelere l'execution de la fonction. Et si on met un "register" devant le nom de variable, s'il reste des registres libres, il n'y a pas besoin d'allouer de memoire, mais si il n'y a plus de registres libres, est-ce exactement comme si on n'avait pas mit de "register" ?
Pas tout à fait d'accord avec ton : void main() { toto(); // crée la variable toto(); // ne fait rien puisque la variable est déjà créée } La variable n'est pas crée lors du 1er appel de toto() mais lors du lancement du prog, une variable static n'étant en fait qu'une variable "globale" mais visible uniquement dans une fonction.
Funto66 > Excellente precision.
Ouahh, t'as raison MasterShadows, J'ai remplacé: pBielle->effort_interne= raideur_ressort*(longueur_bielle-l) - amortissement*prod_scal*l_inv; par: a=longueur_bielle; a-=l; a*=raideur_ressort; b=amortissement; b*=prod_scal; b*=l_inv; a-=b; pBielle->effort_interne=a; (a et b etant deja definis car utilisé apres) Et le programme a gagné en rapidité (3%) ! Thanks ! Faut que je retape toutes mes fonctions, j'ai du boulot ! Moralité: Faire comme en assembleur, 1 ligne = 1 opération
"ECRIVEZ TOUJOURS : float x =0.0f; ET NON float x = 0.0; LE COMPILATEUR DOIT EFFECTUER LES CONVERSIONS <=> CONSEQUENCE : PERTE DE TEMPS" N'importe quoi ! C'est stoqué au moment de la compilation en binaire ! C'est la même chose ! C'est comme quand tu code : "X = 5*5" Après la compilation, y aura : "X = 25". Par contre, créer des variables dans une partie de code n'est pas plus rapide, du au fait que les variables sont allouées sur la pile. Y a même une mini perte de temps, a cause du code pour modifier le pointer de pile. Par contre, le programme prendra moins de place en mémoire. @+ L'ASM, ça a du bon.
Je ne suis pas d'accord avec toi, Bombela, regarde dont le bouqin de Laurent Testud sur la programmation de jeux avec DirectX, à moins d'une erreur d'interprétation au niveau de ce que j'ai dit sur les float , je maintiens que tout ce que j'ai dit est bon
mouais chu pas trop convaincu par ce tuto... deja pour les float c le compilateur qui fait les conversions que ce soit ecrit avec des f ou pas c juste une question de lisibilité et ca ne change en rien la vitesse d'execution de ton programme... pour ce qui est des incrementations : D3DXVECTOR3 vA, vB, vC; // allocation mémoire vA = vB + vC; // utilisation de l'operateur+ défini par la classe D3DXVECTOR3 // création variable temporaire pour la stocker résultat opération donc construction (sur la pile) // utilisation du constructeur de recopie // destruction variable temporaire vA = vB; // utilisation constructeur de recopie vA += vC; // utilisation operateur += de la classe D3DXVECTOR3 donc il ya bien gain de temps et de mémoire ram en utilisant les incrementeurs des classes et cela est vrai pour toute classe d'ou l'interet des incrementeurs... i++ est plus optimisé que i = i+1; mais en arriver la devient ridicule... dans ce cas la autant faire ta routine en assembleur et l'incorporer à ton programme... d'autant plus qu'une grande partie de l'optimisation vient du compilateur : faut utiliser les bons flags et avoir un bon compilateur :p c souvent étonnant de voir le résultat code machine d'une source c (soit disant optimisée) et qui au final est tout pourri ou inversement (mais c moins frequent :p) donc si tu geres mal ton compilo meme en voulant soi disant optimiser tu te retrouvera avec un code tout pourri... principalement à retenir sur ce tuto : - utiliser les incrémenteur natifs (moins d'erreur et plus rapide) - n'utiliser pas de variables temporaires à tout va - matez un peu les inline, define, register, static etc... ;) faire ca c ridicule : a=longueur_bielle; a-=l; a*=raideur_ressort; b=amortissement; b*=prod_scal; b*=l_inv; a-=b; pBielle->effort_interne=a; passe a l'assembleur............... voit pas l'interet de faire du c ou c++ en plus si tu touche un peu aux flags de ton compilateur il te le fera tout seul à la compilation... ++
Ne pourrais-tu pas écrire en francais, MasterShadows ? Si vraiment ton "CPU travail rapidement" dès la deuxieme ligne de ton tutorial, je me demande comment ton programme peut fonctionner ? C est pas si compliqué que cela d écrire correctement et cela fait tellement plaisir de lire du code commenté en bon francais de temps à autres. Vous avez encore le temps de le faire en 1ere.
Heu c'est pas pour dire mais je doute que tu soit réellement l'auteur de tes petits conseils. J'ai chez moi un livre : DirectX 9 de Laurent Testud (jme goure peut etre dans le nom :d) et ya un chapitre sur l'optimisation et c'est EXACTEMENT les meme conseil dans le meme ordre! Donc a part modifié un peu le vocabulaire et changer le nom des variables toi et tes potes de STI-A faut arreter de pomper ;) bye ! PS: les droits d'auteurs c'est précieux
C'est Tesdud, pas Testud xD
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 903 527 membres 104 nouveaux aujourd'hui 16 195 membres club