ou d'utiliser printf() avec "%s"... Sans doute trop simple...Envoyé par Popof
ou d'utiliser printf() avec "%s"... Sans doute trop simple...Envoyé par Popof
Pas de Wi-Fi à la maison : CPL
en même temps, il y a un wait(20) entre chaque affichage de caractère.Envoyé par Emmanuel Delahaye
J'ai pas bien compris ce que faisait le wait(20),
ça a l'air d'avoir à voir avec des threads et/ou des signaux.
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
On saura si on a gagné du temps le jour où on aura fait des mesures dans des conditions reproductibles... Se méfier des apparences.Envoyé par ggnore
Prendre aussi en compte le degré d'optimisation du compilateur qui peut très bien, après avoir compris l'intention du programmeur, choisir la stratégie de codage la plus efficace. Et je ne parle pas des pipelines et autres architectures complexes à prédiction...
Pour ces raisons, ce qu'on a pu écrire sur 'tableau vs pointeur' dans les années 80' à propos du langage C n'est plus si évident de nos jour avec les UC et compilateurs modernes...
Le seul critère objectif reste la mesure.
Pas de Wi-Fi à la maison : CPL
Tu n'as pas du faire beaucoup de x86 en mode réel!Envoyé par Pouic
Pas de Wi-Fi à la maison : CPL
L'adresse est une constante. Elle ne prend pas de place. C'est la valeur qui occupe une place en mémoire. Plus exactement, c'est la variable (l'objet). La valeur est le contenu de cette variable.Envoyé par ggnore
Peut être...l'adresse d'un double long aura la même taille que celle d'un char,
Oui, mais ça veut pas dire que le traitement d'une telle donnée sera plus lent ou plus rapide...mais au final la donnée double long prendra tout de même plus de place en mémoire, non ?
Fait des mesures objectives avant de te prononcer...L'optimisation ne mène pas nulle part, j'en suis sûr.
Erreur. Il est recommandé d'utiliser toujours des int ou unsigned int (taille 'naturelle des objets vu du processeur) pour les travaux courants. Un char tout seul utilisé comme petit entier génère souvent plus de code, car il faut l'étendre en int pour le traiter dans les registres internes du processeur...D'ailleurs en voyant ce thread, je me suis dit que j'utiliserais peut être des unsigned char plutôt que des int, maintenant, pour les petites boucles qui nécessitent un indice.
Idem pour les paramètres, on a jamais vu de paramètre de type [signed ]|[unsigned ]char dans la bibliothèque standard du C. Normal, tout paramètre 'char' est converti en 'int' automatiquement (idem pour 'short'). Cette conversion n'est pas gratuite.
Pas de Wi-Fi à la maison : CPL
Ok, dans ce cas un putchar() aurait été plus léger...Envoyé par ggnore
Pas de Wi-Fi à la maison : CPL
Envoyé par Emmanuel Delahaye
A quoi est ce qu'on peut se fier alors pour tenter d'optimiser du code ?
Si ça ne vaut rien d'essayer de mettre de types de variables le plus prêt possible du domaine de valeur d'une variable, je ne comprends plus rien.
Comment optimiser du code alors ?
A part tatonner et tester la vitesse d'éxécution ?
Faut il absolument connaître le fonctionnement interne du résultat compilé par le C ? Faut il comprendre comment ce résultat dialogue avec la machine ? Est ce que ça dépend beaucoup de la machine ?
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
ok ok merci pour vos reponses elles m'ont été tres utiles encore merci
Equipe SG1 au rapport!
Pour comparer deux codes C, il faut comparer la sortie ASM car les compilateurs optimisent beaucoup
Optimiser pourquoi faire ?Envoyé par ggnore
L'expérience montre que pour gagner en efficacité, il faut :
- Ecrire le code normalement sans astuces particulière, mais en veillant comme toujours à ce qu'il n'y ai ni bug (facile) ni comportement indéfini (difficile...)
- Passer le code au profiler pour voir quelles sont la ou les fonctions les plus utilisées.
- Faire des mesures sur ces fonctions (facile, suffit d'instrumenter le test unitaire...).
- Voir si on peut améliorer l'algorithme (éviter les redondances, les parcours de listes et de tableaux imbriqués etc.)
- Monter le niveau d'optimisation du compilateur
- En dernier seluement, faire les micro optimisations. En fait, c'est rarement utile.
Pas de Wi-Fi à la maison : CPL
Ok.Envoyé par Emmanuel Delahaye
Est ce que essayer d'économiser la déclaration de variable peut être un plus ? Est ce que par exemple, déclarer 2 char *, parcequ'on veut avoir deux noms de variable causant crée une réelle différence avec la déclaration d'un seul char * qu'on va utiliser pour 2 travaux différents ?
ça doit sûrement être inquantifiable, non ?
Par ailleurs, que penses tu de ce genre de code
le code en lui même est sans intérêt, mais est ce que mettre des accolades au milieu d'une plus grosse portion de code pour pouvoir rendre une variable 'volatile' a un intérêt ? (ce que je veux dire, c'est qu'une fois l'accolade fermante autour du
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int main(){ int a,b,c; b=12; a = 1 +b; c=3; { int d; d=48; } }
la variable d n'a plus d'existence.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part int d;
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux
La seule réponse sensée est "faire des mesures"...Envoyé par ggnore
Je fais ça tout le temps parce que ça résout beaucoup de problèmes de conception.Par ailleurs, que penses tu de ce genre de code
le code en lui même est sans intérêt, mais est ce que mettre des accolades au milieu d'une plus grosse portion de code pour pouvoir rendre une variable 'volatile'[1] a un intérêt ? (ce que je veux dire, c'est qu'une fois l'accolade fermante autour du
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main(){ int a,b,c; b=12; a = 1 +b; c=3; { int d; d=48; } }
la variable d n'a plus d'existence.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part int d;
http://emmanuel-delahaye.developpez....tes.htm#portee
Quand à l'effet sur la mémoire, il est variable. Certain compilateurs savent réutiliser la mémoire automatique libérée, d'autres ne se posent même pas la question et allouent toutes les variables sur la pile sans réflechir (MRI de Mentor Graphics, par exemple)...
--------------------------
[1] Attention, le terme 'volatile' a un sens précis en C (c'est même un mot clé) et il n'a rien à voir avec l'utilisation que tu en fais...
Pas de Wi-Fi à la maison : CPL
Je pense qu'au niveau de l'optimisation, il est bon d'avoir certains réflexes. Je ne dis pas de programmer des portions de code en assembleur, mais de réfléchir à ses algorithmes dans les portions critiques du programme.
Je suis d'accord avec Emmanuel, faire des mesures peut parfois nous apprendre beaucoup de choses.
Juste un exemple: souvent dans mes premiers programmes, j'écrivais mes propres fonctions de concaténation ou de copie de chaîne de caractères.
Et puis un jour j'ai fait des mesures. Et bien quelle surprise lorsque je me suis aperçu que les fonctions strcat, strcpy, etc... étaient bien plus optimisées que ce que je ne pouvais faire.
Donc oui faire des tests, une fois que l'on a pris quelques habitudes, il devient moins nécessaire de s'inquiéter de l'optimisation.
Je pense que le programmeur qui s'inquiète de savoir si le code qu'il écrit est du bon code, est un bon état d'esprit. Je dirais que se poser des questions sur l'optimisation est presque un réflexe pour les programmeurs débutants. Quand on débute on veut savoir si notre code est efficace et optimisé.
Les programmeurs avancées se posent moins ce genre de question(sauf cas particulier, ex: jeux vidéos), parce qu'ils ont pris certaines habitudes et que leur code a pû être maintes fois éprouvé.
Open Source Microsoft MediaFoundation
https://github.com/mofo7777
http://jeux.developpez.com/faq/directx/?page=dshow
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager