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 :

Problème avec les allocateurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET/C/C++
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET/C/C++
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut Problème avec les allocateurs
    Bonjour à tous,

    j'essaie actuellement d'implémenter une classe shared_vector, qui serait un mix entre un std::vector et un std::shared_ptr, l'idée étant que que lorsque je fais une copie de mon vector je ne fais qu'incrémenter un compteur de référence, et lorsque mon vector est détruit je décrémente ce compteur. Une fois que celui-ci atteint 0, les elements de mon vector sont alors détruit. (Rien de méchant jusqu'ici).
    J'aimerai pouvoir passer en paramètre template un type d'allocateur à utiliser pour effectuer les allocations de mémoire. Le hic, c'est que quand j'alloue de la mémoire, je dois pouvoir réserver de la mémoire pour stocker les éléments dans mon tableau + mon compteur de références. Or, l'interface des allocateurs ne permet que de reserver de la mémoire pour X éléments d'un type donné, mais ne permet pas de spécifier une quantité précise de mémoire à allouer.

    Qqun a une idée de comment je peux faire?

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    tu ne peux pas juste faire un vector de shared_ptr?

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    tu ne peux pas juste faire un vector de shared_ptr?
    ou plutôt un shared_ptr<std::vector<Element>>
    Or, l'interface des allocateurs ne permet que de reserver de la mémoire pour X éléments d'un type donné, mais ne permet pas de spécifier une quantité précise de mémoire à allouer.
    Il est facile de passer de l'un à l'autre:
    X*Element => X*sizeof(Element)
    Si tu veux que ton allocateur alloue de la mémoire disons 10octets... C'est simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Memory
    {
    unsigned char [10];
    };
    Tu passe ça en élément dans ton vector. Puis quand tu veux l'utiliser comme un autre élément tu le cast (Element*)MemoryPtr;Si tu veux que tes 10 octets soit aligné selon Element alors tu passes alignement en alignof(Element) et élément a alloué Memory
    Tu pourrais même : shared_ptr<std::vector<shared_ptr<Element>>>

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET/C/C++
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET/C/C++
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut
    Citation Envoyé par Astraya Voir le message
    ou plutôt un shared_ptr<std::vector<Element>>
    Je pourrai, mais avoir un shared_vector est plus simple à l'utilisation. (En plus c'est potentiellement + performant)
    Il est facile de passer de l'un à l'autre:
    X*Element => X*sizeof(Element)
    Sauf qu'a ces X*sizeof(Element), je dois ajouter sizeof(ref_counter), et c'est bien là le problème.

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je pourrai, mais avoir un shared_vector est plus simple à l'utilisation. (En plus c'est potentiellement + performant)
    Laisse moi douter du fait que tu puisses faire plus performant sans y passé des mois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sauf qu'a ces X*sizeof(Element), je dois ajouter sizeof(ref_counter), et c'est bien là le problème.
    Donc shared_ptr<std::vector<Element>>

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur .NET/C/C++
    Inscrit en
    Septembre 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET/C/C++
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2007
    Messages : 71
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je pourrai, mais avoir un shared_vector est plus simple à l'utilisation. (En plus c'est potentiellement + performant)
    Laisse moi douter du fait que tu puisses faire plus performant sans y passé des mois
    Fais gaffe, je serai capable d'en faire le pari
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sauf qu'a ces X*sizeof(Element), je dois ajouter sizeof(ref_counter), et c'est bien là le problème.
    Donc shared_ptr<std::vector<Element>>
    Précisemment ce que je veux éviter.

    Petite remarque au passage:
    J'ai besoin de cela pour un projet perso, donc je ne cherche pas une solution rapide.
    Et si je pose la question, c'est aussi parce que je la trouve intéressante car elle mets en évidence une limitation des allocateurs actuels.

    Deuxième remarque:
    Hier je suis tombé là-dessus:
    http://en.cppreference.com/w/cpp/exp...emory_resource
    A priori c'est quelque chose de prévu pour C++17, aussi je me demande si ce n'est finalement pas là la solution à mon problème.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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