2010-10-11 16 views
5

Jak mówi tytuł, w porównaniu do normalnej funkcji, czy istnieje perfekcja w wywoływaniu funkcji DLL? Plik dll zostanie załadowany przez dlopen. EDYTOWANIE: Ignoruj ​​dlsym czas, ponieważ robię to tylko raz dla każdej funkcji.Czy istnieje perf perf, używając funkcji DLL?

+1

nie nazwać go DLL pod linux. Jest to obiekt wspólny. Załadowanie obiektu współużytkowanego zajmuje trochę więcej czasu, jednak po jego załadowaniu nie powinno to odbiegać od normalnych funkcji. – Vinzenz

Odpowiedz

5

wywołań funkcji DLL są pośrednie przez adres i kompilator nie może ich inline, więc istnieje niewielkie uderzenie wydajność.

Powinieneś się tylko martwić, jeśli użyjesz ich w wewnętrznej pętli krytycznej i po profilowaniu.

+0

Ok. Profil to zrobię! :RE – nakiya

0

Tak, jest wydajność. Wykonujesz wywołanie dlsym, aby uzyskać adres funkcji, a następnie wywołujesz funkcję o tym adresie. Ponieważ istnieje dodatkowe wywołanie dlsym w porównaniu do wywołania funkcji z tego samego modułu, musi być wolniejsze. Ile to ma znaczenie? To zależy. Jedyny pewny sposób, by wiedzieć, to zmierzyć to.

+0

Masz rację. Ale w moim przypadku robię tylko 'dlsym' raz na całe życie programu dla każdej funkcji. I dodatkowo używam wskaźników funkcyjnych do wywoływania funkcji. A co wtedy? – nakiya

+0

@nakiya W takim przypadku tracisz tylko możliwości optymalizacji, które miałbyś w przeciwnym razie, gdyby wywoływana funkcja była połączona statycznie, tj. Inlining, optymalizacja między-procesowa, stała propagacja i tym podobne. Innymi słowy, nie różni się to od wywoływania funkcji tego samego modułu za pomocą wskaźnika funkcji. – usta

0

Najlepszym sposobem, aby dowiedzieć się, jest po prostu do mierzenia ...

Powiązane problemy