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