none
getsize de structures / compilation win32 et x64 RRS feed

  • Question

  • Bonjour, je compile une dll en 32 et 64 bits, mais j'ai un comportement que je ne comprend pas lors de l'execution de celle en 64 bits. Je fais juste un sizeof() de deux structures. La dll compilée en win32 me donne le résultat attendu, mais celle compilé en 64bit me donne le même résultat pour les deux structures, et different ce celui donné par Win32. Je crois avoir lu que la taille des int, double, short.... ne changeait pas d'une compilation à l'autre, donc je ne comprends pas. merci d'avance pour votre aide

    
    vendredi 12 février 2016 10:37

Réponses

  • >Je crois avoir lu que la taille des int, double, short.... ne changeait pas d'une compilation à l'autre

    Vous avez mal lu, elle change même avec la même cible (x86,x64), en fonction des réglages du compilateur.

    En plus, même si les types simples avaient la même taille, la politique d'alignement des champs des structures est aussi fonctions des réglages du compilateur. Réglages bien différents entre x86 et x64.

    Il ne faut donc pas faire d'assertion sur le layout des structures.

    Ce n'est pas impossible de rendre ce layout identique entre 2 projets, un x86 et l'autre x64, mais cela tombera pas en marche tout seul, au minimum, il faut utiliser des types spécifiant de manière non ambiguë leur taille, leur endianess et la politique de padding des structures.


    Paul Bacelar, Ex - MVP VC++

    vendredi 12 février 2016 16:13
    Modérateur