Euh sinon pour les structures, on m'a toujours dit que c'était mal d'écrire des structures dans un fichier sans les sérialiser.
j'ai un doute sur la signification du terme "serialiser" la... tu veux dire sans ecrire les champs 1 a 1?
avec des settings de compilateurs != pour l'alignement des champs, a priori oui, ca sera pas au meme endroit, il les paddera pas pareil (par contre il me semble que les normes C/C++ interdisent de reorganiser les champs des structures (mais j'en suis pas sur du tout)), mais tu peux forcer temporairement le packing du compilateur pour ecrire une structure en bloc dans un fichier:
#include "pack1.h"
typedef struct
{
[...]
} t_pwet;
#include "packp.h"
avec:
pack'n'.h ('n' == 1 || 2 || 4 || 8, etc...)
#if defined(__GNUC__)
# pragma pack(push, 'n')
#else
# if (_MSC_VER >= 800 && !defined(_M_I86)) || defined(_PUSHPOP_SUPPORTED)
# pragma warning(disable:4103)
# if !(defined(MIDL_PASS)) || defined(__midl)
# pragma pack(push, 'n')
# else
# pragma pack('n')
# endif
# else
# pragma pack('n')
# endif
#endif
et packp.h:
#if defined(__GNUC__)
# pragma pack(pop)
#else
# if (_MSC_VER >= 800 && !defined(_M_I86)) || defined(_PUSHPOP_SUPPORTED)
# pragma warning(disable:4103)
# if !(defined(MIDL_PASS)) || defined(__midl)
# pragma pack(pop)
# else
# pragma pack()
# endif
# else
# pragma pack()
# endif
#endif
mais c'est quand meme fortement deconseille d'utiliser des structures packees octet par octet au runtime oui...
si t'as que des chars dedans, tu t'en fous, mais certaines instructions ne peuvent pas lire des types 32 bits qui ne sont pas alignes sur 32 bits, ou des types 64 bits pas alignes sur 64 bits, etc... (certaines plantent (notemment certaines instructions SIMD), d'autres sont seulement plus lentes (il me semble, pas teste...), et toutes risquent d'etre ralenties de facon significative si elles doivent lire un bloc de donnees qui chevauche deux cache lines).
bref, dans la plupart des cas, a moins d'ecrire a la main de l'asm qui contient des instructions SIMD sensibles, vu que le compilateur les generera pas lui meme si il sait que la structure n'est pas alignee (enfin en tout cas VC le fait pas, et GCC non plus, peut etre qu'il y a des compilateurs autistes qui font pas gaffe ceci dit...), y a pas de risques de plantages, juste de ralentissements de ton code...
mais en tout cas, lorsque tu ecris ou lis une structure en un bloc d'un fichier, il faut qu'elle soit correctement packee, sinon ca fera de la merde...