j'ai trouvé this sur MSDN:alignement des données de 64 bits de Windows en termes de développement du pilote
Sur les plates-formes Windows 32 bits, le système d'exploitation corrige automatiquement les défauts d'alignement mémoire en mode noyau et les rend invisibles à l' application. Il le fait pour le processus appelant et tous les processus descendants. Cette fonctionnalité, qui réduit souvent considérablement les performances, n'a pas été implémentée dans Windows 64 bits. Ainsi, si votre pilote 32 bits contient des bogues d'alignement, vous devrez les corriger lors du portage vers Windows 64 bits.
Je suis un peu effrayé par cela. Quelqu'un peut-il me montrer un exemple du bug de désalignement ?
EDIT: Je connais fondamentalement le concept d'alignement et sa raison. Je veux juste comprendre la différence entre win32 et win64 en termes de "réparation automatique" sur l'alignement et l'impact sur mon pilote.
Merci pour les explications graphiques et littéraires. Je suis curieux de connaître le point de "réparation automatique". Cela signifie-t-il que win32 ajoutera automatiquement des paddings à la structure, et win64 ne le fera pas? Que faire si je #pragma pack (1) pour les deux? – solotim
Le remplissage est effectué par le compilateur, quelle que soit l'architecture, et non par une version/architecture donnée de Windows. Vous pouvez supprimer le comportement par défaut du compilateur en utilisant '#pragma pack (1)' et ainsi forcer l'empaquetage serré, ce qui est souvent nécessaire pour le codage du protocole, mais c'est là que le problème commence. En résumé, si vous respectez le comportement par défaut du compilateur, vous pouvez oublier les problèmes d'alignement. –
@solotim L'accès à des données mal alignées provoquera une exception matérielle. Je suppose que ce que le "correctif automatique" fait est de gérer ce genre d'exceptions en décomposant l'accès mémoire mal aligné en plusieurs accès mémoire alignés, puis en retournant la valeur reconstruite. Cela signifie que plusieurs instructions s'exécutent après celle qui est défectueuse, ce qui réduit les performances. Encore une fois, ce n'est qu'une spéculation de mon côté, je ne l'ai pas confirmé moi-même. –