Puis-je lire/écrire en toute sécurité des structures multiplateformes/compatibles avec les compilateurs dans des fichiers ?
Les structures en C présentent un défi pour les compatibilité des plates-formes en raison des différences potentielles de remplissage entre les compilateurs. Cette disparité résulte du manque de standardisation en C au niveau binaire.
Comme Don Box l'explique dans son livre "Essential COM", le modèle d'exécution binaire de C n'est pas standardisé. Par conséquent, différents compilateurs peuvent utiliser différents alignements de remplissage pour les structures, même lorsqu'ils utilisent le même compilateur avec différentes directives pragma pack.
De plus, l'ordre de déclaration des membres dans une structure peut affecter sa taille, même si les membres restent identique. Par exemple :
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
Compilées avec gcc-4.3.4, les tailles de A et B diffèrent malgré leurs membres identiques :
Size of A: 8 Size of B: 12
Cette disparité rend impossible de supposer que tous les compilateurs rempliront les structures de la même manière. Par conséquent, il n'existe aucune méthode garantie pour lire/écrire en toute sécurité des structures dans des fichiers d'une manière compatible avec plusieurs plates-formes/compilateurs.
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!