Question

Je sais que le compilateur peut ou ne peut pas effectuer l'expansion en ligne d'une fonction si demandée par le programmeur ou non.
J'étais curieux de savoir, est-il un moyen par lequel programmeur peut savoir avec certitude que le compilateur a inline une fonction particulière?

Était-ce utile?

La solution

Autre que en regardant le code généré, non. Certaines mises en œuvre peuvent fournir cette information mais pas requis par la norme.

Des choses comme inline ou register (frisson) sont suggestions au compilateur et il est libre de les accepter, de les ignorer ou même de vous mentir que cela se fait en allant en secret derrière votre dos et ne pas faire il: -)

Je tendance à ne pas utiliser des fonctionnalités comme ça depuis que je soupçonne que le compilateur sait souvent mieux que moi comment essorez les meilleures performances de mon code.

Autres conseils

Vous pouvez profiler votre code et voir si la fonction d'intérêt apparaît dans la pile d'appels. Bien que, je suppose qu'il n'y a aucune garantie si votre taux d'échantillonnage de la pile est pas assez élevé.

Mais il peut prouver qu'il est inline: si vous savez A appelle B, qui appelle C et A appels ne C directement, si vous voyez A appelant C sur la pile d'appel, vous savez B a été inline pour cet appel.

Définissez votre compilateur pour générer le code assembleur et vérifier là.

Lire le démontage du fichier objet.

Il n'y a aucun moyen de savoir que pour regarder l'assembleur de sortie.

COMPILATEURS ces jours-ci sont « intelligents » et ils décident quelles fonctions inline et dans quels cas.

Tout comme le mot-clé de registre, compilateurs font la cueillette de ces jours et vraiment ignorer 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 elle est appelée. vous avez i.e. toujours de mettre la définition d'une fonction en ligne dans le fichier d'en-tête.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top