Je sais que le compilateur peut ou non effectuer une expansion en ligne d'une fonction, qu'elle soit demandée par le programmeur ou non.
J'étais juste curieux de savoir, est-il possible par quel programmeur peut savoir avec certitude que le compilateur a souligné une fonction particulière?Fonctions en ligne
Répondre
Autre qu'en regardant le code généré, non. Certaines implémentations peuvent fournir cette information, mais ce n'est pas requis par la norme.
Des choses comme inline
ou register
(frisson) sont suggestions au compilateur et il est libre de les accepter, les ignorer ou même de vous mentir qu'il l'a fait en allant en secret derrière votre dos et ne pas le faire :-)
je tendance à ne pas utiliser des fonctionnalités telles que, puisque je pense que le compilateur sait souvent mieux que moi comment essorez les meilleures performances de mon code.
Lire le désassemblage du fichier objet.
Définissez votre compilateur pour générer le code assembleur et cochez-le.
Et si vous avez des drapeaux différents pour les versions de débogage v, assurez-vous d'utiliser ce dernier. J'ai vu des compilateurs qui ne sont jamais intégrés à moins que vous ayez au moins une optimisation activée. –
Vous pouvez profiler votre code et voir si la fonction qui vous intéresse s'affiche dans la pile d'appels. Bien, je suppose qu'il n'y a aucune garantie si votre taux d'échantillonnage de pile n'est pas assez élevé.
Mais il peut prouver qu'il est inline: si vous connaissez A
appels B
, qui appelle C
et A
appels jamais directement C
, si vous voyez A
appelant C
sur la pile d'appel, vous savez B
a été inline pour cet appel .
Il n'y a aucun moyen de savoir, sauf pour regarder l'assembleur de sortie.
Les compilateurs de nos jours sont «intelligents» et ils décident des fonctions à intégrer et dans quels cas.
Tout comme le mot-clé register, les compilateurs font la sélection ces jours-ci et ignorent vraiment vos demandes.
Je ne pense pas qu'il y ait un moyen de savoir ce que vous voulez,
Mais vous pouvez augmenter les possibilités de la fonction étant une fonction en ligne par,
Faire la définition de la fonction visible à l'unité de traduction dans laquelle il est appelé. c'est-à-dire que vous devez toujours mettre la définition d'une fonction inline dans le fichier d'en-tête.
Question plus appropriée, y at-il un moyen par lequel le programmeur peut savoir avec certitude que le compilateur a inséré une fonction particulière * appel *? – Potatoswatter