Come dice il titolo, rispetto a una funzione normale, c'è un colpo perfetto nel chiamare le funzioni di dll? La DLL verrà caricata da dlopen
. MODIFICA: Ignora dlsym
tempo perché lo faccio solo una volta per ogni funzione.C'è qualche colpo di grazia usando le funzioni della DLL?
risposta
chiamate a funzioni DLL sono indiretti per indirizzo e il compilatore non li può inline, per cui v'è un leggero calo di prestazioni.
È necessario preoccuparsi solo se vengono utilizzati in un ciclo interno critico delle prestazioni e dopo averli profilati.
Ok. Profilo che farò! : D – nakiya
Sì, c'è un calo di prestazioni. Fai una chiamata dlsym per ottenere l'indirizzo della funzione e poi chiama la funzione con quell'indirizzo. Poiché esiste una chiamata dlsym aggiunta rispetto a una chiamata di funzione dallo stesso modulo, deve essere più lenta. Quanto conta? Dipende. L'unico modo sicuro per saperlo è misurarlo.
Hai ragione. Ma nel mio caso, eseguo 'dlsym' una sola volta per tutta la durata del programma per ogni funzione. E, inoltre, uso i puntatori di funzione per invocare la funzione. E allora? – nakiya
@nakiya In tal caso perdi solo le opportunità di ottimizzazione che avresti altrimenti se la funzione chiamata fosse collegata staticamente, cioè inlining, ottimizzazione inter-procedurale, propagazione costante e simili. In altre parole, non è affatto diverso dal chiamare una funzione dello stesso modulo tramite un puntatore a funzione. – usta
Il modo migliore per scoprire è semplicemente per misurare ...
- 1. Come visualizzare le funzioni DLL?
- 2. Esportare le funzioni da dll solo ordinale
- 3. API Win32 per enumerare le funzioni di esportazione dll?
- 4. Come si chiamano le funzioni DLL di Windows da Ruby?
- 5. Python può chiamare le funzioni Delphi in una DLL?
- 6. C'è qualche svantaggio nel sovraccaricare le funzioni in ruggine usando un tratto e una funzione generica?
- 7. C'è qualche concetto simile a DLL o DLL in Android?
- 8. Visual Lisp: come chiamare le funzioni in DLL C++ esterna
- 9. Come si concatenano le funzioni usando lodash?
- 10. nomi delle funzioni DLL utilizzando Dumpbin.exe
- 11. Overhead della chiamata di funzione DLL
- 12. C# Mettendo le DLL richieste da qualche altra parte rispetto alla radice dell'output
- 13. Comporre funzioni quotate usando le espressioni di calcolo
- 14. Chiude con grazia un'applicazione multithreading?
- 15. Come chiamare le funzioni di una DLL COM (in VC++) da un'applicazione VC++ .EXE?
- 16. Tracciare le funzioni di densità predefinite usando ggplot e R
- 17. Utilizzo di funzioni SWIG con wrapping da Windows .dll
- 18. Esportazione di funzioni da C++ dll a C# P/Invoke
- 19. Scopri le dipendenze di tutte le DLL?
- 20. Posso impostare le chiavi di un array usando le funzioni di array come array_map
- 21. Come proteggere le DLL .NET
- 22. Python Flask chiama le funzioni usando i pulsanti
- 23. Impostazione della didascalia Unicode da una stringa DLL DLL Tabella
- 24. C'è qualche possibilità di avere funzioni di preservazione JSON.stringify?
- 25. Chiamata di funzioni da un C++ DLL in Delphi
- 26. Come proteggere le DLL?
- 27. HTMLAgilityPack QuerySelectorTutte le eccezioni di lancio, la mancata corrispondenza della versione di dll di Fizzler?
- 28. Ottenere risultati diversi usando la pipeline con le funzioni
- 29. incompatibilità della versione di NewtonSoft JSON.NET (inferno della DLL)
- 30. È possibile utilizzare le funzioni di chiamata Rust dalla DLL scritta nell'implementazione C++?
non si chiama DLL sotto linux. È un oggetto condiviso. Il caricamento dell'oggetto condiviso richiede un po 'di tempo extra ma una volta caricato non dovrebbe fare alcuna differenza dalle normali funzioni. – Vinzenz