Je réalise qu'en général les normes C et C++ donnent beaucoup de latitude aux rédacteurs de compilateurs. Mais en particulier, il garantit que les types de POD comme les membres de la structure C doivent être mis en mémoire dans le même ordre que dans la définition des structures, et la plupart des compilateurs fournissent des extensions permettant de corriger l'alignement des membres. Donc, si vous aviez un en-tête qui définissait une structure et spécifiait manuellement l'alignement de ses membres, puis compiliez deux applications avec des compilateurs différents en utilisant l'en-tête, une application ne devrait-elle pas pouvoir écrire une instance de la structure en mémoire partagée et l'autre application être en mesure de le lire sans erreurs?Est-il possible de partager une structure C en mémoire partagée entre des applications compilées avec différents compilateurs?
Je suppose cependant que la taille des types contenus est cohérente entre deux compilateurs sur la même architecture (elle doit être la même plate-forme déjà puisque nous parlons mémoire partagée). Je me rends compte que cela n'est pas toujours vrai pour certains types (par exemple long ou long dans GCC et MSVC 64 bits) mais de nos jours il y a des types uint16_t, uint32_t, etc., et float et double sont spécifiés par les normes IEEE.
Les anciennes bibliothèques de liens dynamiques ne le font-elles pas tous les jours? Il ne doit pas être la mémoire partagée, les structures entre deux bibliothèques ou une bibliothèque et l'application compilée indépendamment face à la même question. La bibliothèque peut être compilée avec PIC, mais cela ne change pas la disposition des structures. – Ioan
Lorsque les bibliothèques partagent le même ABI. Cela est généralement vrai pour les bibliothèques C compilées avec des compilateurs différents mais pas C++. –