Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C/C++] Szybkość wykonywania operacji

Ostatnio zmodyfikowano 2013-07-11 20:44
Autor Wiadomość
Xynxyn
Temat założony przez niniejszego użytkownika
[C/C++] Szybkość wykonywania operacji
» 2013-07-11 15:53:01
Ja i me kolejne pytania... ;D
Tak pytam z ciekawości, co jest szybsze, sprawdzenie warunku np.:
if( a = 3 ) {...}

czy przypisanie wartości do liczby, np.:
a = 4;

Wiadomo, różnice są rzędu nanosekund czy milisekund, ale chcę wiedzieć... ;)

PS. i czy w C i C++ jest to jakaś różnica. (zakładam, że nie bo po procesie kompilacji kod asemblera wygląda tak samo za pewne - te same czynności, to samo) :)

Z góry dziękuję za odpowiedzi. ;)
P-87542
m4tx
» 2013-07-11 15:54:36
Tak pytam z ciekawości, co jest szybsze, sprawdzenie warunku np.:
if( a = 3 ) {...}
To nie jest sprawdzenie warunku :)
P-87543
Xynxyn
Temat założony przez niniejszego użytkownika
» 2013-07-11 15:58:25
Literówka, powinno być if (a == 3) ;D

EDIT:
Poza tym TO JEST sprawdzenie warunku. Po prostu zawsze będzie słuszny. Ale warunek to wciąż jest. Tak jakbym napisał if (10) dosmth(); ( i przy okazji przypisanie wartości do liczby, ale to już inna sprawa)
Skoro już tak się przyczepiłeś literówki. ;P
P-87544
m4tx
» 2013-07-11 16:05:13
Poza tym TO JEST sprawdzenie warunku. Po prostu zawsze będzie słuszny. Ale warunek to wciąż jest. Tak jakbym napisał if (10) dosmth();
Skoro już tak się przyczepiłeś literówki. ;P
Ależ ja o tym doskonale wiem - rzecz w tym, że byłem pewien, że chodziło Ci o
==
, a nie
=
. Tym bardziej że na logikę coś1 + coś2 na pewno będzie wolniejsze niż coś1 (gdzie coś1 to oczywiście
a = 3
, a coś2 to
if( cos1 )
).
P-87546
Xynxyn
Temat założony przez niniejszego użytkownika
» 2013-07-11 16:07:32
Ależ chodziło mi o if (a == 3) i a = 4. ;D
P-87547
Thud
» 2013-07-11 16:08:50
Najchętniej dowiedziałbym się, co na ten temat powiedziałby asembler.
P-87548
Xynxyn
Temat założony przez niniejszego użytkownika
» 2013-07-11 16:18:22
Ja też, ale... nie wiem gdzie jest/są plik(i) z kodem asemblera po kompilacji. (używam Code::Blocks z GNU GCC)
P-87552
Thud
» 2013-07-11 16:23:32
Ciekawostka mikroprocesorowa (AVR):
Instrukcja bezpośredniego przypisania (LDI) stałej do rejestru zajmuje 1 cykl procesora.
Instrukcja relatywnego skoku do danej części kodu (RJMP) to 2 cykle zegarowe procesora.
Instrukcja przeskoczenia, jeżeli któryś warunek nie jest spełniony/jest spełniony:
Skip if Bit in Register Cleared (SBRC)
Skip if Bit in Register is Set (SBRS)
Skip if Bit in I/O Register Cleared (SBIC)
Skip if Bit in I/O Register is Set (SBIS)
Trwa (w zależności od wyniku): 1, 2 lub 3 cykle zegarowe.
Instrukcja porównania i wpisania wartości wyniku do specjalnego rejestru (nazwanego SREG - Status Register) trwa 1 cykl zegarowy.
Dodatkowe instrukcje, które mogą zostać wykonane po tej operacji (porówniania) w zależności od wyniku trwają 1 lub 2 cykle zegarowe.

To był przykład dla Attiny2313. Inne AVR'y mają podobnie. Źródło:
http://www.atmel.com/images​/doc2543.pdf

Strony 213 i 214.
P-87555
« 1 » 2 3
  Strona 1 z 3 Następna strona