So che il compilatore può o non può eseguire l'espansione in linea di una funzione, richiesta o meno dal programmatore.
Ero solo curioso di sapere, c'è un modo in cui il programmatore può sapere per certo che il compilatore ha delineato una funzione particolare?Funzioni in linea
risposta
Altro che guardando il codice generato, no. Alcune implementazioni possono fornire tali informazioni ma non sono richieste dallo standard.
Cose come inline
o register
(brivido) sono suggerimenti al compilatore ed è libero di accettarle, ignorarli o addirittura mentire a voi che è fatto, mentre di nascosto va dietro la schiena e non farlo :-)
Tendo a non utilizzare funzioni del genere poiché sospetto che il compilatore spesso sappia meglio di come estorcere il maggior numero di prestazioni dal mio codice.
Leggere lo smontaggio del file oggetto.
Imposta il compilatore per generare il codice assembler e controllare lì.
E se si dispone di flag diversi per le versioni di debug v release, assicurarsi di utilizzare quest'ultimo. Ho visto alcuni compilatori che non sono mai in linea a meno che non sia abilitato almeno un po 'di ottimizzazione. –
È possibile profilare il proprio codice e verificare se la funzione di interesse viene visualizzata nello stack di chiamate. Sebbene, suppongo, non vi è alcuna garanzia che la frequenza di campionamento dello stack non sia abbastanza elevata.
Ma può dimostrare che è inline: se si sa A
chiamate B
, che invita C
, e A
non chiama mai C
direttamente, se si vede A
chiamando C
sul stack di chiamate, si sa B
stato inline per tale chiamata .
Non c'è modo di sapere se non per guardare l'assemblatore di uscita.
I compilatori in questi giorni sono "intelligenti" e decidono che cosa funzioni in linea e in quali casi.
Proprio come la parola chiave del registro, i compilatori eseguono il ritiro in questi giorni e ignorano davvero le vostre richieste.
Non credo ci sia un modo per scoprire ciò che si vuole,
Ma è possibile aumentare le possibilitá della funzione di essere una funzione inline da,
Rendere la definizione della funzione visibile all'unità di traduzione in cui è chiamato. Devi sempre mettere la definizione di una funzione in linea nel file di intestazione.
- 1. Le funzioni in linea hanno indirizzi?
- 2. Le funzioni point free erano in linea?
- 3. Fudging la linea tra classi e funzioni
- 4. Le funzioni virtuali in linea sono davvero un non senso?
- 5. Come scoprire quali funzioni NON erano in linea
- 6. Definizioni delle definizioni di funzioni Python in linea
- 7. Quando si dovrebbero usare macro invece di funzioni in linea?
- 8. Collegamento funzione in linea
- 9. Come funzionano le funzioni MATLAB e la linea è diversa?
- 10. Ereditarietà e in linea?
- 11. Funzione modello in linea?
- 12. funzione virtuale in linea
- 13. funzioni all'interno funzioni in C
- 14. Quando è "in linea" inefficace? (in C)
- 15. in linea Argomenti funzione Passare
- 16. Elementi in linea e altezza della linea
- 17. La definizione di un distruttore impedisce che le funzioni membro siano in linea
- 18. sublime testo plugin 2 per il completamento automatico in linea per funzioni javascript fondamentali
- 19. Come può Java in linea oltre i limiti delle funzioni virtuali?
- 20. Perché le funzioni in linea sono autorizzate a modificare le variabili dei membri privati?
- 21. Dimensioni del codice: statico in linea rispetto a inline per funzioni definite nei file di intestazione
- 22. Perché le funzioni in linea hanno un collegamento esterno per impostazione predefinita?
- 23. Metodi in linea statici?
- 24. farsi lambda in linea?
- 25. Codice in linea ASP.net
- 26. linea tratteggiata in Jfreechart
- 27. Dubbio in linea ASM
- 28. Jinja2 commenti in linea
- 29. ritorno in linea-se
- 30. returnTrue e returnFalse funzioni in fonte jQuery
Domanda più appropriata, c'è un modo in cui il programmatore può sapere per certo che il compilatore ha inarcato una particolare funzione * chiamata *? – Potatoswatter