Référence pour comprendre ce qui se passe lors de l’exécution d'un code

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Salut les gens, Je me demandais qu'est ce qui se passe lors de l'appel d'une fonction dans C et cette réponse m'a un peu clarifier l'esprit .

Alors si par hasard vous pourriez m'indique un joli article ou un livre pour comprendre ce qui se passe.

+0 -0
Staff

Salut,

Si tu n'as pas de notions en Assembleur, cela te semblera toujours un peu flou. Grosso modo, lors d'un appel de fonction :

  1. Les éventuels arguments sont stockés (soit dans la pile soit dans des registres, cela dépend de l'architecture de ton processeur), et le contexte d'exécution est sauvegardé. Ceci comprend, pour faire bref : une référence vers l'instruction suivant l'appel et l'adresse de début de la portion de mémoire occupée par les variables locales de la fonction.
  2. La fonction appelée réserve une portion de mémoire pour ses variables locales et exécute son corps.
  3. La fonction appelée libère la portion de mémoire réservée et le contexte d'exécution précédemment sauvegardé est restauré.
  4. L'instruction suivant l'appel est exécutée.

Édit : sinon, sur ce site, il y en a entre autres cet article de Ge0.

Édité par Taurre

+3 -0
Staff

Il faudrait vérifier, mais ça relève plutôt de l’ABI qui est typiquement différente entre Windows et Linux, par exemple, même sur la même archi.

lethom

Cela relève effectivement de l'ABI, mais aussi de l'architecture. Par exemple, sous x86, c'est toujours la pile qui est employée et non des registres vu qu'ils sont en nombre limités.

+1 -0

J’imagine en effet que les ABI sont aussi influencées par l’architecture ; ceci étant dit, même sur x86, on peut (et dans la pratique on fait) des passages par argument par registres. Je sais notamment que l’ABI de Windows prévoit d’utiliser en premier lieu et quand c’est possible des registres. Si tu dépasses un certain nombre d’arguments, le reste est de fait mis sur la pile.

Oh, au temps pour moi, je fais pas vraiment de distinction entre les deux étant donnés que majoritairement, tous les processeurs font de l’amd64 et que c’est au choix de l’OS de l’activer ou non. J’avoue ne pas connaître les différentes ABI dans le cas d’un cpu en mode protégé. Mea culpa.

Édité par lethom

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte