Aller au contenu

Apprendre l'optimisation en C?


Alemort
 Share

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?
Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres 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 :)

Modifié par Alemort
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres 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!

Lien vers le commentaire
Partager sur d’autres 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é.

Lien vers le commentaire
Partager sur d’autres 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.

Lien vers le commentaire
Partager sur d’autres sites

Join the conversation

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

Invité
Répondre à ce sujet…

×   Vous avez collé du contenu avec mise en forme.   Supprimer la mise en forme

  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.

Chargement
 Share

×
×
  • Créer...