begin process at 2012 05 27 17:37:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > OPTIMISATION DE CODE

OPTIMISATION DE CODE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Débutant Date de création :03/06/2004 Vu / téléchargé :5 786 / 725

Auteur : MasterShadows

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note


 Description

Il s'agit d'un tutorial (très court) sur l'optimisation de code...
Que la plupart d'entre vous connaissent peut-être mais on ne sait jamais donc je la poste quand même....

Allez, @ plus



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Tutorial.rtfTélécharger ce fichier [Réservé aux membres club]4 366 octets

Télécharger le zip


 Sources du même auteur

Source avec Zip BLITTAGE DE SURFACE AVEC DIRECTX 9 SANS DIRECTDRAW
Source avec Zip DIRECT X : AUDIO
Source avec Zip TRACEUR EQUATION V1.1
Source avec Zip SCRIPTLOADER : AFFICHE UN SCRIPT CRÉER AVEC GMAX
Source avec Zip GRAPH 3D

 Sources de la même categorie

LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture QCSSCOMPRESSOR par alphaone
AFFICHAGE D'UN TRIANGLE ISOCELE par nabche
Source avec Zip GESTION D'UNE BIBLOTHEQUE par leclerro19

Commentaires et avis

Commentaire de Galmiza le 04/06/2004 19:06:52

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 ?

Commentaire de Cyberboy2054 le 04/06/2004 22:43:05

Tu les déclare en début de prog et les détruit a la fin ...

Commentaire de Cyberboy2054 le 04/06/2004 22:49:24

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

Commentaire de bigzooloo le 05/06/2004 10:31:18

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

Commentaire de Galmiza le 05/06/2004 11:50:39

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" ?

Commentaire de Funto66 le 05/06/2004 11:59:41

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.

Commentaire de BruNews le 05/06/2004 13:01:09 administrateur CS

Funto66 > Excellente precision.

Commentaire de Galmiza le 05/06/2004 21:46:10

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

Commentaire de Bombela le 06/06/2004 20:21:03

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

Commentaire de MasterShadows le 08/06/2004 11:39:23

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

Commentaire de StanOfSky le 08/06/2004 17:51:16

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

++

Commentaire de Kornferki le 16/06/2004 15:21:00

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.

Commentaire de Bartoune74 le 15/01/2006 19:52:31

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

Commentaire de Saros le 14/03/2006 21:43:43

C'est Tesdud, pas Testud xD

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales