IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Petite question de performance sur le transtypage


Sujet :

C

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 77
    Points
    77
    Par défaut Petite question de performance sur le transtypage
    Bonjour à tous,

    Petite présentation du contexte : j'ai été formé et jusqu'à peu, je ne travaillait qu'exclusivement en Java Et comme vous pouvez l'imaginer, j'essaye de me mettre au C.

    Je travail sur un gros projet que j'avais conçut en Java. Je ne peux vous dire sa fonction ou vous passer le code pour des raisons professionnelles, mais je peux vous dire que celui-ci avait pour but de traiter un fichier dans un format particulier pour en ressortir un résultat, et cela pouvait parfois prendre 2h de calculs sur une config' monstre.

    Bref j'essaye de tout refaire en C et je me pose une question.
    Je travail avec pas mal de type dans mon projet comme des listes chainées ou des HashTable. Dans ce type de structure, les données sont "stockées" avec un type void*. Prenont l'exemple des HashTable et voici le code de la structure HashTable dont je me sers, pris dans un tutoriel développez.com :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef struct cell{
       char *key;
       void *data;
    } cell_s;
     
    typedef struct hash{
       cell_s *p_cell;
       int size;
    } hash_s;
    Mais du coup, quand je veux extraire ces données pour les traiter, je suis obliger de les caster dans le type d'origine. Et j'ai remarqué que dans mon code, je dois faire beaucoup de cast.

    Bref tout ce blabla pour cette question : pensez-vous que ces cast vont beaucoup influer sur les performances de mon programmes, notamment le temps d'exécution ? Et n'aurais-je pas interêt à créer des types spécialisés, du genre une HashTable devant contenir des int, une HashTable devant contenir des char*, etc ... ce qui réduirait mon nombre de cast ?

    La question est peut-être stupide mais je vous remercie malgré tout d'avance de vos réponses

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Les casts sont des directives au compilateur, pas des instructions pour le processeur. Ils sont donc traités au moment de la compilation et non au moment de l'exécution. Aucune influence sur les perfs donc.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Melem Voir le message
    Les casts sont des directives au compilateur, pas des instructions pour le processeur. Ils sont donc traités au moment de la compilation et non au moment de l'exécution. Aucune influence sur les perfs donc.
    Pas toujours. Certains cast modifient radicalement la représentation mémoire de la donnée, par exemple un cast d'un int vers un float doit être fait à l'exécution si le int n'est connu qu'à ce moment là.
    Pour les void* en un autre type de pointeur, je ne crois pas qu'il y ait de certitude que cela est toujours fait à la compilation (autrement dit sans changement de la représentation binaire de l'adresse) mais c'est certainement le plus courant.

  4. #4
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Ah oui c'est vrai, j'ai dit une c*nnerie. J'ai pensé à quelques cas particuliers et j'ai généralisé, ce qu'il ne fallait pas faire. Merci .

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 77
    Points
    77
    Par défaut
    Merci de vos réponses, je vais faire avec sa

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petite question de débutant sur procédure stockée
    Par Flexii dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 19/04/2011, 19h04
  2. Réponses: 6
    Dernier message: 17/06/2010, 15h37
  3. petite question toute simple sur les boucles
    Par elmcherqui dans le forum C++
    Réponses: 7
    Dernier message: 21/05/2008, 11h15
  4. [Debian_Etch] Petits soucis de performance sur un serveur
    Par Arnulf dans le forum Administration système
    Réponses: 7
    Dernier message: 22/01/2008, 18h09
  5. Petite question de débutant sur les lumières
    Par Clad3 dans le forum OpenGL
    Réponses: 12
    Dernier message: 05/11/2007, 23h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo