Maison > développement back-end > C++ > Puis-je stocker et récupérer en toute sécurité des structures C sur différentes plates-formes et compilateurs ?

Puis-je stocker et récupérer en toute sécurité des structures C sur différentes plates-formes et compilateurs ?

Mary-Kate Olsen
Libérer: 2024-12-19 04:36:13
original
224 Les gens l'ont consulté

Can I Safely Store and Retrieve C   Structs Across Different Platforms and Compilers?

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;
};
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal