comment le code de fonction en ligne est-il remplacé dans le lieu d’appel?

Je veux savoir comment l’appel de fonction en ligne est remplacé par le code en ligne. J’ai lu dans certains livres que le compilateur peut traiter la fonction en ligne comme une fonction normale.

est-ce que n’importe qui peut expliquer comment fonctionne la fonction inline.

De la FAQ C ++:

Lorsque le compilateur développe en ligne un appel de fonction, le code de la fonction est inséré dans le stream de code de l’appelant (conceptuellement similaire à ce qui se passe avec une macro #define). Cela peut, en fonction de plusieurs millions d’autres choses, améliorer les performances, car l’optimiseur peut intégrer le code appelé de manière procédurale – optimiser le code appelé dans l’appelant.

Il existe plusieurs façons de désigner une fonction en ligne, certaines impliquant le mot-clé inline, d’autres pas. Quelle que soit la manière dont vous désignez une fonction en ligne, il s’agit d’une requête que le compilateur est autorisé à ignorer: elle peut développer en ligne certains, tous ou aucun des appels à une fonction en ligne. (Ne vous découragez pas si cela semble désespérément vague. La flexibilité de ce qui précède est en fait un énorme avantage: elle permet au compilateur de traiter des fonctions volumineuses différemment des plus petites, et de générer du code facile à déboguer si vous sélectionnez les bonnes options du compilateur.)

Dans le cas le plus simple, la fonction en ligne est insérée dans son site d’appel comme si vous l’aviez copiée-collée. Ainsi pour

inline int madd( int a, int b, int c ) { return a * b + c; } void foo( int data[3] ) { int result = madd( data[0], data[1], data[2] ); printf("%d\n", result); // note to pedants: this is simpler than a cout stream, so there } 

le compilateur pourrait le transformer en

 void foo( int data[3] ) { int result = data[0] * data[1] + data[2] ; // madd is replaced inline printf("%d\n", result); } 

En déclarant une fonction inline, cette fonction est remplacée par sa définition directement à l’endroit où elle est appelée. Il enregistre le temps d’exécution, car généralement, les appels de méthode normaux consistent en un transfert de contrôle vers cette fonction et en atsortingbuant différemment la mémoire à cette exécution.

En faisant inline, la fonction est exécutée en tant que inline, ce qui supprime le transfert de contrôle dans le corps de cette fonction.

Généralement, la fonction est créée en ligne en ajoutant un mot clé en ligne devant son type de retour dans sa déclaration.

En fonction en ligne, nous pouvons éviter la surcharge de la fonction et économiser le temps d’exécution.

 Example: inline mul (int a, int b) { int multi; multi = a * b; } 

par là, nous pouvons éviter la surcharge de la fonction (signifie stocker le PC en mode stack push & pop)

inline est une suggestion pour le compilateur. Si le compilateur peut le faire tout en effectuant ses autres optimisations, il intégrera la fonction, ce qui signifie qu’il mettra le contenu de la fonction “inline” sur le site d’appel, évitant ainsi la création de la stack et la surcharge de l’appel. Cependant, comme indiqué, il s’agit d’une suggestion et le compilateur n’est pas obligé de le faire