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 :

Allocation/Accès mémoire vecteurs matrice


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut Allocation/Accès mémoire vecteurs matrice
    Bonjour,

    Dans mon code j'ai la possibilité de déclarer 3 vecteurs (std::vector<double>) ou bien une matrice (std::vector<std::vector<double>>)

    Ce qui m’intéresse dans mon code est la rapidité de l'exécution, pour l'allocation mémoire j'ai pas de contraintes.

    Qu'est ce qui est plus rapide entre les deux déclarations ci-haut (coté accès mémoire lors de la lecture des vecteurs).

    pouvez vous m'expliquer ce compromis Allocation/Accèes mémoire pour améliorer la performance de mon code

    Merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par 3aychoucha Voir le message
    Qu'est ce qui est plus rapide
    Ne pas utiliser de vecteurs.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Utilise plutôt 3 std::vector alloués distinctement. Tu sais dès la compil qu'il t'en faudra 3, donc inutile de les stocker dans un autre std::vector, dont l'intérêt est de gérer une quantité indéfinie d'objets. En plus, accéder à tes attributs via this->vv[0] sera toujours moins explicite que this->monPremierVecteur dans ton code, sans compter les risques de confusion d'indices.

    Citation Envoyé par oodini Voir le message
    Ne pas utiliser de vecteurs.
    En mode release, std::vector::operator[] n'est pas plus lent qu'un accès "classique" à un tableau C, si ?

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 382
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par oodini Voir le message
    Ne pas utiliser de vecteurs.
    Utiliser quoi donc?
    Merci d'avance

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Mouais, ok. Encore le problème des vector vs tableaux style C. Je peux pas dire qu'il n'y a pas de différence. Mais ce n'est pas en général la plus grosse source de perte de performance. Et donc jamais la première optimisation à faire

    @cob59
    entre vector::operator[] et p[], je crois pas qu'il y ait de différence (peut être que certaine implémentation de vector::operator[] ajoute un assert en debug pour vérifier l'indice passé ?)
    Par contre, il y a une différence entre un algo utilisant un accès aléatoire avec[] et un algo utilisant un accès séquentiel avec ++

    @3aychoucha
    Si tu sais que tu as 3 vecteurs, tu n'est pas obligé d'utiliser un vecteur de vecteur. Comme le dit cob59, un vecteur, c'est un tableau dynamique
    Par contre, tu peux utiliser std::array (ou boost::array si tu n'utilises pas le C++11), qui est un tableau statique
    Mais la solution avec 3 vecteur est tout à fait acceptable

    Le plus important quant on fait de l'optimisation, c'est surtout de ne pas perdre de temps à optimiser ce qui n'est pas nécessaire. Typiquement dans ton cas, l'utilisation de 3 vecteurs ou d'un vecteur de vecteur représentera 0.1% de perte de perf si à côté du fais 10000 push_back

    Pour optimiser, il faut obligatoirement :
    1. faire du profiling
    2. choisir le bon algorithme
    3. éviter les allocations (dans l'idéal, une seule)
    4. pour terminer, faire de la micro optimisation (tableau style C, pointeur au lieu d'itérateur, etc)

    Tu as également la possibilité d'utiliser les optimisations matérielles (multithreading, sse, gpu, etc) selon le besoin en données et algos utilisables

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Si c'est du statique, il vaut encore mieux utiliser Boost.MultiArray.

Discussions similaires

  1. [debutant] : Allocation de mémoire dynamique
    Par sam.fet dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2006, 14h58
  2. Problème d'allocation de mémoire dans la pile
    Par prophet666 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 19/01/2006, 02h22
  3. [Debutant]Allocation de mémoire
    Par gwendal84 dans le forum C
    Réponses: 6
    Dernier message: 07/12/2005, 19h04
  4. Double allocation de mémoire
    Par hunter001 dans le forum C++
    Réponses: 16
    Dernier message: 25/08/2005, 13h53
  5. pb d'allocation de mémoire
    Par shura dans le forum C
    Réponses: 7
    Dernier message: 17/04/2005, 21h10

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