Pour utiliser OSAtomicDecrement (opération atomique spécifique à mac), je dois fournir un SInt32 aligné sur 4 octets.Comment s'assurer qu'un membre est aligné sur 4 octets?
Ce type de cuisson fonctionne-t-il? Existe-t-il une autre façon de gérer les problèmes d'alignement?
struct SomeClass {
SomeClass() {
member_ = &storage_ + ((4 - (&storage_ % 4)) % 4);
*member_ = 0;
}
SInt32 *member_;
struct {
SInt32 a;
SInt32 b;
} storage_;
};
Quel est l'avantage de cette solution car elle est moins portable (et un espace supplémentaire de 4 octets utilisé est ok)? – gaspard
Je ne veux pas vraiment ajouter un autre '#ifdef __gcc__' ... – gaspard
-1: ceci s'assure que le stockage pour le pointeur est aligné. Oui, puisqu'il est aligné storage_ serait également aligné mais c'est indirect et déroutant. Si vous voulez recommander l'alignement, ajustez directement la variable (supprimez la structure et créez juste un membre '__attribute __ ((__ aligned (4))) SInt32 a_;' –