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 :

align 128 byte


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut align 128 byte
    Bonjour,

    J'ai un problème d'alignement sur 128 byte pour les données membres de ma classe, je m'explique. Pour allouer dynamiquement une simple variable sur 128 byte, je sais faire, en utilisant les bons include (suivant le système ici IBM - QS 22) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    double * a = _malloc_align( 1024, 7) // 2**7 = 128,
     
    //petit test
    if((size_t)a & 128 ) { 
    std::cout << " ok " << std::endl;
    }else{ std::cout << " no ok " << std::endl; }
    /**
    Ca marche je suis content, passons à l'étape suivante, petite classe avec un peu de stl**/
    //petite fonction d'alloc
    void * get( size_t n){ return _malloc_align(n):}
     
    class test
    {
    public: 
         test():ptr(NULL){} 
         void * ptr;
    };
     
    -------------------------------------------------------------------------
     
    std::vector<test*> vtest(9); 
    std::vector<test*>::const_iterator it=vtest.begin();
     
    for(;it != vtest.end();it++)
    {
        test* a = *it;
        a = new test();
        a->ptr = get(2048);
        if((size_t)a->ptr & 128 ) { 
        std::cout << " ok " << std::endl;
        }else{ std::cout << " no ok " << std::endl; }
    }
    Et la c'est le drame, c ' est totalement instable la variable ptr n est pas aligné malgré le fait que je l'alloue avec la bonne fonction.

    Je pense que le pb vient de new, lorsque je construit mon objet la variable ptr n'aura pas nécessairement une adresse multiple de 128 byte ...

    Quelqu'un aurait t il une idée ?

    Merci

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    new c'est new.

    Dans nt2 on a un petit arsenal pour ca:

    https://github.com/MetaScale/nt2/blo...t2/sdk/memory/

    et

    https://github.com/MetaScale/nt2/blo...sdk/src/memory

    plus specialement aligned_allocator.hpp, overload.hpp et allocate.hpp

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    ton test if((size_t)a & 128 ) n'est pas bon.

    Pour tester si tes donnees sont alignees sur 128, il te faut un test du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (!(size_a & 127))
       cout << "ok"

Discussions similaires

  1. Byte alignement 8
    Par illouzy dans le forum Qt
    Réponses: 12
    Dernier message: 11/05/2009, 20h09
  2. Problème d'alignement sur 128 bits
    Par progfou dans le forum C++
    Réponses: 24
    Dernier message: 06/07/2007, 16h15
  3. JBuilder7 & JTable Colonne alignement
    Par Tonton Luc dans le forum JBuilder
    Réponses: 5
    Dernier message: 06/11/2002, 17h32
  4. [Datareport] Alignement
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/11/2002, 11h53
  5. [VB6] [Printer] Chiffres alignés à droite
    Par Laye dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/10/2002, 18h36

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