Jump to content
Sign in to follow this  
Alemort

Apprendre l'optimisation en C?

Recommended Posts

Comme-vous le savez lorsque l'on fait de la programmation, un point important auquel n'ont accordé aucune attention lorsque l'on commence, c'est bien l'optimisation.
Donc pour aller vers l'optimisation en language C, vers où se tourner?
 
Pour améliorer ses algorithmes de calcul:
-vers l'assembleur pour optimiser les différents calculs
-Utiliser des types de variables moins gourmandes
 
Optimisation générale:
-éviter la copie de variable ou de tableaux dans des fonctions.
-Recoder les fonctions que l'on utilise pour mieux les comprendre et en créer de moins gourmandes pour nôtres utilisations.
Mais bon, les cours sur internet né détail pas trop ces points généralement.
 
 
Quelques questions:
            Pour recoder une fonction par exemple prin, on se dirige vers quel type de fonction? Les fonctions que l'on utilisera il serait bien de les recoder mais il arrivera un point ou on pourra plus continuer, non?
 
           Y a-t-il de bons sites qui donnent des conseils sur ce genre de sujet?
 
           Y a-t-il d'autres voix pour optimiser son programme?
 
           Est-il préférable d'optimiser son programme en codant les fonctions, ou bien coder un programme qui marche et ensuite l'optimiser?

Share this post


Link to post
Share on other sites

Je compte faire un tutoriel là dessus dès que j'aurai le temps (par exemple, savoir quand il faut passer une structure par copie, etc..), donc je te laisse attendre un peu, le temps que je monte le cours :).

Share this post


Link to post
Share on other sites

"-vers l'assembleur pour optimiser les différents calculs" : Tu peux expliquer ton idée ? :)

Sinon, oui, bonne idée AlexMog aussi.

Share this post


Link to post
Share on other sites

"Utiliser des types de variables moins gourmandes" 

-A moins ce que tu travaille sur un système qui a une mémoire très limitée, c'est rarement utile.(je parle de trucs genre char a la place d'int)

 

" Pour recoder une fonction par exemple printf, on se dirige vers quel type de fonction? Les fonctions que l'on utilisera il serait bien de les recoder mais il arrivera un point ou on pourra plus continuer, non?"

-Les fonctions système, qui sont gérées par l'OS. Ceux qui ont creer l'OS ont bien coder ces fonctions, pourquoi pas toi ? :P

 

"vers l'assembleur pour optimiser les différents calculs"

-Ecrire de l'assembleur qui est plus rapide que du C requiert une excellente connaissance

Share this post


Link to post
Share on other sites

@Azad: Lorsque je parle d'Assembleur, ce n'est pas pour remplacer le code en C par de l'asm mais pour comparer plusieurs calculs qui donnent le même résultat final pour repérer celui qui à besoin de moins de puissance/étapes.

 

@Davydavek: Lorsque l'on utilise des tableaux de grande taille, c'est toujours intéressent, donc prenons un char qui vaut octet et un int qui en prend 4, et ce tableau avoisine les 12500 surface.

Un tableau de int prendra: 50.000 octet et un char 12.500. Optimiser des petites choses sur un programme de plusieurs millier de ligne peut être bénéfique je trouve ;).

Et sinon lorsque-tu parles de recoder les fonctions systèmes ou des fonction de son OS, il faut s'y prendre comment? oO

 

@Alex: J'attend ton tutoriel avec impatience :)

Edited by Alemort
  • Upvote 1

Share this post


Link to post
Share on other sites

 

Et sinon lorsque-tu parles de recoder les fonctions systèmes ou des fonction de son OS, il faut s'y prendre comment? oO

Sous Windows tu peut recoder les fonctions en usermode, pour ça faudra analyser les DLLs du systeme avec un debugger, Apres pour les fonctions kernel (Nt/Zw), aucune idée, je ne suis jamais aller plus loin que le SYSENTER.

 

Sous Linux, vu que le kernel est open-source, tu peut juste regarder la source puis essayer de faire ta propre version.

Share this post


Link to post
Share on other sites

Sous Windows tu peut recoder les fonctions en usermode, pour ça faudra analyser les DLLs du systeme avec un debugger, Apres pour les fonctions kernel (Nt/Zw), aucune idée, je ne suis jamais aller plus loin que le SYSENTER.

 

Sous Linux, vu que le kernel est open-source, tu peut juste regarder la source puis essayer de faire ta propre version.

PAs besoin de se prendre la tête.

Tu vas dans les headers (sous linux, c'est pour ça que linux est plus adapté) system, et tu regarde simplement la liste des fonctions system ;) (les fonctions system sont déjà codées en ASM, tu ne peux pas aller plus bas niveau, c'est donc la "base" de la programmation en C, tu peux trouver une liste des fonctions system sur Google aussi!) Une fois que tu as les fonctions system, tout le reste c'est de la logique! Interdit toi les fonctions de la libC, et tu verra, tu codera un Printf rapidement, et tu comprendra comment il marche (ça marche avec absolument toutes les fonctions de la libC, je t'invites à lires mes cours, qui n'utilisent QUE des fonctions system.)

 

Enjoy!

Share this post


Link to post
Share on other sites

PAs besoin de se prendre la tête.

Tu vas dans les headers (sous linux, c'est pour ça que linux est plus adapté) system, et tu regarde simplement la liste des fonctions system ;) (les fonctions system sont déjà codées en ASM, tu ne peux pas aller plus bas niveau, c'est donc la "base" de la programmation en C, tu peux trouver une liste des fonctions system sur Google aussi!) Une fois que tu as les fonctions system, tout le reste c'est de la logique! Interdit toi les fonctions de la libC, et tu verra, tu codera un Printf rapidement, et tu comprendra comment il marche (ça marche avec absolument toutes les fonctions de la libC, je t'invites à lires mes cours, qui n'utilisent QUE des fonctions system.)

 

Enjoy!

 

Il demandait comment réécrire les fonctions système, pas celles de la libc.

Ça c'est aussi faisable sur Windows (windows.h), juste que c'est un peu moins bien documenté.

Share this post


Link to post
Share on other sites

Il demandait comment réécrire les fonctions système, pas celles de la libc.

Ça c'est aussi faisable sur Windows (windows.h), juste que c'est un peu moins bien documenté.

Théoriquement, c'est possible de les recoder, mais en ASM uniquement.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...