Domanda

So che il compilatore può o meno eseguire l'espansione in linea di una funzione sia richiesta dal programmatore o meno.
Ero solo curioso di sapere, esiste un modo in cui il programmatore può sapere con certezza che il compilatore ha inserito una funzione particolare?

È stato utile?

Soluzione

Oltre a guardare il codice generato, no. Alcune implementazioni possono fornire tali informazioni ma non sono richieste dallo standard.

Cose come inline o register (rabbrividi) sono suggerimenti al compilatore ed è libero di accettarli, ignorarli o addirittura mentirti che lo ha fatto mentre vai segretamente alle spalle e non lo fai :-)

Tendo a non usare funzionalità del genere poiché sospetto che il compilatore sappia spesso meglio di come faccio a strappare più prestazioni dal mio codice.

Altri suggerimenti

Puoi profilare il tuo codice e vedere se la funzione di interesse viene visualizzata nello stack di chiamate. Anche se, suppongo che non vi sia alcuna garanzia se il tasso di campionamento dello stack non è abbastanza elevato.

Ma può dimostrare che è inlineato: se lo sai A chiamate B, che chiama C, e A non chiama mai C direttamente, se vedi A chiamata C Sullo stack di chiamate, sai B è stato inlineato per quella chiamata.

Imposta il tuo compilatore per generare codice assemblatore e controllare lì.

Leggi lo smontaggio del file oggetto.

Non c'è modo di sapere se non per guardare l'assemblatore di uscita.

I compilatori in questi giorni sono "intelligenti" e decidono quali funzioni in linea e in quali casi.

Proprio come la parola chiave del registro, i compilatori fanno la raccolta in questi giorni e ignorano davvero le tue richieste.

Non credo che ci sia un modo per scoprire cosa vuoi,

Ma puoi aumentare le possibilità della funzione essendo una funzione in linea di,

Rendere visibile la definizione della funzione all'unità di traduzione in cui viene chiamata. cioè devi sempre mettere la definizione di una funzione inline nel file di intestazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top