Ordre et alignement des champs de bits multiplateformes : un mythe
Bien que l'ordre des champs de bits au sein d'une structure puisse sembler spécifique à la plate-forme, la question reste de savoir si les options de compression du compilateur spécifiques à la plate-forme peuvent garantir un stockage cohérent des données.
Considérez ce qui suit scénario :
struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__));
Sur un processeur Intel avec GCC, les champs sont disposés en mémoire comme écrit : la version en premier, suivie du type.
Cependant, la portabilité multiplateforme est encore insaisissable . Les options de compression sont des extensions du compilateur et ne sont pas entièrement portables. De plus, C99 §6.7.2.1, paragraphe 10 indique explicitement que l'ordre d'attribution des champs de bits (d'ordre élevé à faible ou vice versa) est défini par l'implémentation.
Même le même compilateur peut présenter différents champs de bits. mises en page en fonction de l'endianité de la plateforme cible. Par conséquent, s'appuyer sur des options de compression spécifiques au compilateur pour garantir l'ordre et l'alignement des données multiplateformes n'est pas une approche fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!