Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Union] alignement garanti ?

Sujet résolu
    31 décembre 2023 à 15:14:31

    Bonjour,

    J'ai créé pour mon projet plusieurs objets "physiques" (plateformes, boutons etc...).

    Pour me faciliter la vie dans la gestion de ces objets et m'éviter des switch interminables, j'ai créé une union de ces objets ainsi qu'un jeu de fonctions qui me permettent de passer par un "superviseur" d'objets qui, lui, fait le tri entre les objets.

    J'ai en partie la réponse à ma question d'après les essais que j'ai effectués, mais un doute subsiste.

    Je sais que la norme garanti qu'un membre de l'union a la même adresse que l'union, je peux donc libérer une union allouée en passant l'adresse de l'un de ses membres.

    Je sais, par essais, que l'offset d'un membre d'une structure qui serait dans cette union est le même que dans la structure seule, pour être plus clair :

    si on a :
    
    struct myStruct
    {
       int a,b,c;
    }
    tata;
    
    union
    {
      double d;
      struct myStruct toto;
    };
    
    alors :
    
    &union.toto.c - &union == &tata.c - &tata

    ça fonctionne à 100% avec mingw32-gcc, ma question est surtout de savoir s'il est garanti que la padding soit le même dans l'union que dans la structure, ceci quoiqu'il arrive et quelque soit le compilo ?

    Merci.

    -
    Edité par drx 31 décembre 2023 à 15:14:43

    • Partager sur Facebook
    • Partager sur Twitter

    Bonhomme !! | Jeu de plateforme : Prototype.

      1 janvier 2024 à 16:08:45

      Bonjour,

      Quel que soit l'endroit où est utilisée struct MyStruct, ça reste struct MyStruct, Dans l'union elle a un alignement plus contraint (celui de double) mais la structure reste la même. Le padding de la structure ne peut pas dépendre du contexte.
      Si tu passes à une fonction &union.toto, où si tu lui passes &tata. La fonction recevra l'adresse d'une struct MyStruct et heureusement ça aura toujours la même forme 'et pour la fonction l'alignement est celui de int pas celui de double.

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        2 janvier 2024 à 6:14:02

        Merci.

        Cela semble logique, je voulais juste être certain que ça ne causera pas de problème.

        • Partager sur Facebook
        • Partager sur Twitter

        Bonhomme !! | Jeu de plateforme : Prototype.

        [Union] alignement garanti ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown