Alignement Avec Masm.

 

Deux méthodes existent pour aligner les dtructures

 

STORAGE_PROPERTY_QUERY   STRUCT  DWORD

   PropertyId DWORD ?

   QueryType DWORD ?

   AdditionalParameters BYTE 1 dup (?)

STORAGE_PROPERTY_QUERY      ENDS

 

Le mot dword en bleu modifie la taille de la structure pour un faire un multiple de 4(dword=4 bytes)

Ce pourrait être aussi un QWORD (8),BYTE,WORD,..structure,ou le chiffre 4.

 

Pour qu'une structure soit correctement aligné ML /Zpn  et (en data) align n

Le sdk traduit respecte scrupuleusement l'alignement des structures,l'option Zpn est inutile

 Commentaires et résultats

 

 Explication

---Déclaration et offsets relatives -------

BIDON   STRUCT QWORD

        b1 BYTE ? ; +0

        dbl QWORD ? ; +8   et non pas +1

        d DWORD ? ; +16    et non pas +9

        b2 BYTE ? ; +20

        w WORD ? ; +22

BIDON           ENDS 

 

Taille = 24 et non pas 16

 Une API recevant une structure mal alignée vous gratifie d'un "Invalid Argument".Pour éviter les problèmes,utiliser le sdk traduit,voir header.

Une même structure en 32 bits peut avoir une taille différente suivant la version de windows utilisée
Elle change de taille aussi en 64 bits

Optimisation:
Bien des méthodes d'optimisation consistent à utliser des registres plus gros mais aussi travaillant dans des adresses alignés à 16,8..



 

Le microprocesseur perd du temps en formant une adresse composée de bytes (1)

L'alignement consiste a rendre l'adresse multiple de 1,2,4,8,16,........

 Certaines structures ne sont accessibles par les API que si leur adresse est alignée à une valeur fixée par les inclus (.h)

 Voir les inclus avec 'pack' dans leur nom 

 

 

 

 

 

 

 

 

Des headers correctement traduits vous éviteront bien des ennuis.