• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przejrzystość kodu a optymalizacja

Object Storage Arubacloud
0 głosów
418 wizyt
pytanie zadane 28 września 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)

Pytanie troche głupie, ale jestem ciekawy, czy jeśli zapiszę 
 

cout << "Podaj liczbe: " <<endl; 
cin << liczba;

to czy przy wiekszym kodzie bedzie mialo znaczenie, ze zapisze ten kod tak?:

cout<<"Podaj liczbe: "<<endl;cin<<liczba;

Jest o wiele mniej przejrzyscie, ale czy takie pisanie przyspiesza dzialanie programu? 

5 odpowiedzi

+4 głosów
odpowiedź 28 września 2015 przez Bantu Nałogowiec (34,170 p.)
wybrane 28 września 2015 przez C☺ndzi
 
Najlepsza

Nie ma to żadnego znaczenia na szybkość działania kodu jedyne co to utrudnia czytelność kodu programiście.
Tak samo jak nie ma znaczenia czy zapiszemu zmienną, która ma jakąś wartośc np. tak:

int a = 60 * 5 / 100;

czy tak:

int a = 3;

Wynik i tu i tu jest ten sam, a w pierwszym przykładzie obliczenia zostają wykonane w czasie kompilacji, co tylko może nieco wydłużyć kompilację, a nie wykonanie kodu, ale za to dzięki temu nie musimy zastanawiać się jaką wartość ta zmienna przyjmie faktycznie, bo po prostu napiszemy co ma być do czego, a sami nie musimy się głowić nad wynikiem, co prawda jak później coś źle działa to trzeba to debugować, ale to już inny temat :D

komentarz 28 września 2015 przez Armando Obywatel (1,870 p.)
Zgadzam się z kolegą powyżej :)
komentarz 14 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
"Wynik i tu i tu jest ten sam," tak do końca się nie zgodzę ponieważ int może "ściąć" resztę  z dzielenia i wyniki mogą wyjść inny w innych przykładach, ale to tylko takie mini odbicie od sedna tematu :)
+3 głosów
odpowiedź 28 września 2015 przez hit02 Nałogowiec (33,970 p.)
edycja 28 września 2015 przez hit02

Koledzy już odpowiedzieli na pytanie, ale dodam, że różnicy nie ma również między dwoma poniższymi kodami:

cout<<"Blahblah"<<123<<"more blah.";
cout<<"Blahblah";
cout<<123;
cout<<"more blah.";

W obu przypadkach kompilator wygeneruje kod z trzema wywołaniami funkcji - 2 razy funkcja wypisująca ciąg znaków i raz wypisująca liczbę.

Co prawda, w wygenerowanym kodzie asemblera była drobna różnica, ale nie miała ona całkowicie znaczenia dla działania programu, bo była tak zwanym śmieciem. Co do wpływu tej różnicy na wydajność programu, można by długo dyskutować, ale w obydwu przypadkach śmieć był dość szybką instrukcją.

PS Testowałem tylko dla kompilatora g++. Jeżeli ktoś chce powtórzyć eksperyment, to trzeba skorzystać z przełącznika -S i dla przejrzystości -masm=intel

+1 głos
odpowiedź 28 września 2015 przez criss Mędrzec (172,590 p.)
Niby dlaczego? o_O To są dokładnie te same instrukcje. Wpływ może mieć co najwyżej na czas kompilacji ale też nie sądze.
komentarz 14 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Chociarzby dlatego, że srednik oznacza koniec wykonywania bloku kodu. W 1 przypadku mamy 1 blok, a w  drugim aż trzy bloki kodu, czyli procesor kończy 1 blok kodu i musi sięgnąć po rozkazy z rejestru by wykonywać następny blok kodu. Lecz to są jedynie przemyślenia i może byc nie prawdą
0 głosów
odpowiedź 28 września 2015 przez writen Nałogowiec (29,060 p.)
Tutaj nie ma żadnej różnicy. Po prostu napisałeś to samo tylko w jednej linii.

Prawdopodobnie mogłoby to przyspieszyć kompilację programu, ale na szybkość jego działania raczej nie będzie miało wpływu. C++ to nie jest język taki jak JavaScript gdzie minifikacja kodu ma duże znaczenie, ponieważ tutaj źródło programu jest kompilowane tylko raz, a nie interpretowane przy każdym uruchomieniu pliku wykonywalnego.
–6 głosów
odpowiedź 28 września 2015 przez R[a]=d(ek); Mądrala (6,370 p.)

Zacznijmy od tego, że ten kod nie będzie wgl działał ponieważ strumień wejścia to: cin >> a nie cin << ...

Ale wracając do pytania szczerze to chyba będą różnice rządu drobnych milisekund.. albo i nawet wcale czego sam też nie jestem pewien.. można było by sprawdzić przecież komputer to urządzenie :skończone i policzalne".. Ale na 100%; zamiast zmiennej o nazwie liczba można zastosować zmienną o nazwie a przez co program będzie ważył mniej i procesor wykona go szybciej... 

komentarz 28 września 2015 przez criss Mędrzec (172,590 p.)
Ekhm co :| Nazwy zmiennych nie są nigdzie zapisywane. To jak jest zapisany kod nie też żadnego wpływu no bo niby dlaczego? Jak nie masz pojęcia to się po prstu nie wypowiadaj.
komentarz 28 września 2015 przez R[a]=d(ek); Mądrala (6,370 p.)
Nazwy zmiennych nie są zapisywane... kolego chodzi mi tutaj o wage programu... weź sobie odpal chodźby nawet głupi notatnik zapisz w nim "a" zapisz plik jako a.txt i weź sobie odpal 2 notatnik i zapisz sobie w nim "zmienna" zapisz plik jako a1.txt porównaj wagę plików. Pierwszy ma 1 bajt zaś drugi 7 co za tym idzie jeśli mamy dosyć długi kod i piszemy nazwy zmiennych w stylu "czlowiekmanaimie" a nie skracamy tego np do "imczlowiek" to program waży więcej i tyczy sie to już po procesie kompilacji... zatem procesor obrobi szybciej ten plik który waży mniej..
komentarz 28 września 2015 przez writen Nałogowiec (29,060 p.)
Na wagę pliku wykonywalnego długość nazw zmiennych czy innych instrukcji nie ma żadnego wpływu. Może to mieć jedynie wpływ na pliki źródłowe. A waga plików źródłowych wcale nie przekłada się na wagę samego programu.
Po kompilacji pliki źródłowe możesz wyrzucić bo na nic wpływu już nie mają.

A tak szczerze, to się nawet uśmiechnąłem. ;)
komentarz 28 września 2015 przez criss Mędrzec (172,590 p.)
Aha. To fajnie.
komentarz 28 września 2015 przez R[a]=d(ek); Mądrala (6,370 p.)

writen  

Racja!  
"rzyspiesza dzialanie programu"  - o to chodziło userowi Condzi nie wiem jakim tgrafem jakoś inaczej zrozumiałem pytanie.... fUcK my logic..  

komentarz 28 września 2015 przez writen Nałogowiec (29,060 p.)
Każdemu może się zdarzyć.

Podobne pytania

0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 25 maja 2015 w C i C++ przez Adam Knie Mądrala (5,650 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 21 stycznia 2022 w C i C++ przez BKantur Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 423 wizyt
pytanie zadane 2 października 2021 w C i C++ przez Michał F Nowicjusz (120 p.)

92,632 zapytań

141,499 odpowiedzi

319,874 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...