Eh bien, cela dépend totalement des circonstances si votre exécutable peut être exécuté sur votre nouveau système ou non. Chaque système d'exploitation définit son propre format de fichier exectuable. Par exemple, here's comment ressemble Windows Exe. Il y a une raison pour laquelle ils sont appelés exécutable portable. Lorsque votre compilateur génère un tel exécutable, il compile d'abord votre code C vers l'assembly correspondant de votre architecture cible, puis le place dans le format de fichier exécutable cible. Les allocations de mémoire statiques trouvent leur place dans ce format.
Vous pouvez imaginer le fichier exe comme une sorte d'image mémoire chargée dans un nouvel espace mémoire par le chargeur de processus des systèmes d'exploitation. Le système d'exploitation maintient le décalage à cet emplacement et s'assure que tous les accès mémoire des programmes vont dans l'espace d'adressage protégé de son processus.
Pour répondre à votre question spécifique: Le transfert d'un exécutable entre des systèmes du même système d'exploitation et de l'architecture n'est généralement pas un problème. Le même scénario de système d'exploitation mais une architecture de machine différente peuvent généralement être manipulés par le système d'exploitation via l'émulation (par exemple, Rosetta de Mac OS émule PowerPC sur x86). La compatibilité 64/32 bits est également traitée de cette manière. Le transfert entre différents OS n'est généralement pas possible (pour les exécutables natifs) mais tout ce qui fonctionne à l'intérieur des machines virtuelles (java vm, .net CLR) ne pose aucun problème, car le chargeur charge uniquement la machine virtuelle et le programme réel est exécuté.
Vous savez que sur les ordinateurs modernes, chaque processus d'exécution voit un nouvel espace d'adresse indépendamment de ce que les autres processus ont fait? (et avant les MMU qui le permettent, il ne serait pas inhabituel de charger des exécutables toujours à la même adresse, bien que la mémoire virtuelle et la liaison soient techniquement deux concepts distincts qui ne doivent pas forcément aller ensemble). –