Crypton3
if (Creature* creature = thing->getCreature()) [...]


Creature* creature = thing->getCreature();

if (creature) [...]


Orientuje się może ktoś czy jest jakaś różnica wydajnościowa między tymi zapisami po stronie kompilatora?
#cpp #programowanie
  • Najlepsze
  • Wszystkie komentarze
l.....l
l.....l
@Crypton3: @ghostface: Prawdopodobnie dokładnie żadna, bo optymalizator robi z takim kodem i tak cuda wianki. Wynika z tego, że prawdopodobnie nie ma jednej odpowiedzi, bo to zależy co jest kontekstem tego kawałka kodu. Jedynym sposobem żeby się czegoś dowiedzieć, to nie tyle skompilować i podejrzeć assemblera (obecne procki assemblera też kompilują, interpretują i optymalizują w trakcie wykonania..), co po prostu pomierzyć czasy wykonania (ale koniecznie w danym kontekście).
ghostface
@Crypton3: skompiluj i zobacz assemblera.
tata_marcina
@Crypton3: @losiul: też tak myślałem, ale z ciekawości sprawdziłem. generowany jest dokładnie identyczny kod przez gcc dla obu przypadków.

Więc pozostaje kwestia czytelności tylko.
Crypton3
Crypton3 Autor
1
@sokytsinolop: Zrobię, tego obiektu można później używać w zakresie ifa.
simia
simia
@nargil: Tutaj to akurat RVO nie bardzo :P
k.....r
k.....r
@Crypton3: @tata_marcina: @nargil: jestem przekonany, ze w kazdym przyzwoitym kompilatorze bedzie dokladnie zadna - bedzie wygenerowane tylko icmp poprzedzone callem i skok warunkowy - a to wszystko w tym samym bloku.
Pewnie w jakichs specyficznych przypadkach wygenerowany kod moze sie roznic, ale w to bardzo watpie i jezeli juz, to bedzie to tylko kwestia szczescia - i nie wiadomo na czyja korzysc.
k.....r
k.....r
@nargil: nie wiem to sie wypowiem
m.....i
m.....i
@Crypton3: Nie masz żadnych poważnych problemów? ( ͡° ͜ʖ ͡°)
cykus
Pierwsze dostępne tylko w pętli drugie poza? czy może się mylę.
sokytsinolop
@Crypton3:
#nieznamsiealesiewypowiem
W pierwszym tworzysz nowy obiekt na którym mozesz potem wykonywać jakieś operacje, 1 wersja zwraca obiekt, albo null i nic z tym pozniej nie zrobisz. 1 będzie bardziej optymalna, ale mogę pieprzyć głupoty, proszę mnie poprawić jeśli tak jest
nargil
@Crypton3: prawdopodobnie nie ma i w obu przypadkach zadziała RVO, więc getCreature od razu utworzy pointer na stosie. Acz to zależy też od implementacji tej funkcji.
k.....r
k.....r
@kuhar: patrzylem na IR generowane przez clanga z trunka przez ostatnie kilkanascie minut i nie moge znalezc zadnego przypadku, dla ktorego zostanie wygenerowany rozne IR
tata_marcina
@kuhar: ja patrzyłem na kod pośredni z gcc + wynikowe asm.
W przypadku gcc po etapie przepisywania do SSA ten fragment kodu powinien wyglądać tak samo.