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

Tablica vs wiele zmiennych - czy programom to jakoś przeszkadza?

Object Storage Arubacloud
+1 głos
236 wizyt
pytanie zadane 11 stycznia 2019 w Algorytmy przez TeslaX93 Gaduła (3,600 p.)

Nie wiedziałem do jakiej kategorii to wrzucić.

Załóżmy, że jesteśmy totalnym nowicjuszem i piszemy swój pierwszy program w jakimkolwiek języku, nie mając pojęcia o istnieniu tablic. Piszemy coś takiego:

$zmienna1 = 0;
$zmienna2 = 8;
$zmienna3 = 1;
...
$zmienna999 = 100+500+100+900;

i tak dalej.

Po wrzuceniu takiego kodu na to forum, każdy złapałby się za głowę i nakazałby temu początkującemu programiście powrót do nauki języka i wykucie tablic. 

Ale pomimo tego, czy istnieje jakakolwiek różnica w szybkości działania takiego programu, zajętości pamięci, etc, jednym słowem - czy poza tym, że kod wygląda źle i niechlujnie, to czy kompilatorowi i procesorowi robi to jakąś znaczącą różnicę?

4 odpowiedzi

+3 głosów
odpowiedź 11 stycznia 2019 przez Comandeer Guru (600,810 p.)
Jak dla mnie to złe podejście do problemu. Języki programowania powstały dla ludzi, by to im się lepiej pisało i czytało kod. Czytelność praktycznie zawsze jest ważniejsza od wydajności (oczywiście w sensownych granicach), bo kod piszemy dla ludzi, nie dla maszyn.

Co do wydajności, prawdopodobnie będzie porównywalna, ale mogą być różne drobne różnice pomiędzy poszczególnymi językami, wynikające choćby z ich semantyki.
0 głosów
odpowiedź 11 stycznia 2019 przez RafalS VIP (122,820 p.)
Raczej nie ma. W C++ można bardzo łatwo sprawdzić, że wygenerowane assemblery nie roznia sie niczym:

https://godbolt.org/z/LH-hBx

W innych językach może być lekka. Np w Javie tablica jest obiektem, więc program będzie się różnił o ten dodatkowy obiekt, który trzeba zaalokować.
komentarz 11 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
Dodaj optymalizację i zobacz co dzieje się w przypadku tablicy i zmiennych jak włączy się wektoryzacja instrukcji.
komentarz 12 stycznia 2019 przez RafalS VIP (122,820 p.)
Tylko z optymalizacją na dowolnym poziomie dla gcc kod zawsze zostaje uproszczony do stałych, więc ciężko cokolwiek zobaczyć.
0 głosów
odpowiedź 11 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
W świetle badań psychologicznych, średnio rozgarnięta osoba potrafi śledzić do 5 czynników wpływających na rozwiązanie. Stąd istotne przekraczanie ilości zmiennych powyżej 5 w jednostce kodu (np. funkcji), odbija się niekorzystnie na kontroli intelektualnej całości kodu. Inne czynniki bierze się pod uwagę w dalszej kolejności lub zmienia się ich znaczenie w bardzo konkretnych przypadkach. Oprogramowanie trzeba utrzymywać nie ze względu na to co potrafi procesor a co rozumie człowiek.

Im lepiej (w bardziej zbliżony do oczekiwań) wyrazisz swoją potrzebę w kodzie, tym większą masz szansę że efekt interpretowanego lub kompilowanego programu będzie Ci odpowiadał. Jeśli dane są w naturalny sposób w tablicy, powinny być tak zapisane. Dajesz wtedy szansę np. kompilatorowi by to odkrył i wykonał optymalizację. Jeśli rozbijesz je na oddzielne zmienne "bo inaczej nie umiesz", dostaniesz coś z czego możesz być niezadowolony.

Powód "bo komputera to nie obchodzi jak to zapiszę" nie jest wystarczający do pisania jak się chce.
–1 głos
odpowiedź 11 stycznia 2019 przez Kabuuz Bywalec (2,820 p.)
Jakos super się nie znam ale według mnie np. dla C/C++ tablica byłaby szybsza przy zastosowaniu wskaźników. Bo tak to program musi sprawdzić adres i dopiero iść do tego adresu a tak to pomija sprawdzanie bo ma go wpisanego (o takim czymś wspominał chyba pan Zelent w swoim kursie). Co do ilości miejsca zajmowanego przez zmienne to będzie to samo. Co do pamieci programu to nie jestem jakoś super pewien ale jak masz tablice no to jednak starcza 2 linijki i możesz zmienić każda wartosc elementu w pętli. A jak będziesz musiał wklepac 1000 linijek to pamięć programu się zwiększy.
2
komentarz 11 stycznia 2019 przez miro Pasjonat (23,870 p.)

Co do pamieci programu to nie jestem jakoś super pewien ale jak masz tablice no to jednak starcza 2 linijki i możesz zmienić każda wartosc elementu w pętli. A jak będziesz musiał wklepac 1000 linijek to pamięć programu się zwiększy.

Przecież ilość linijek kodu nie jest w żaden sposób miernikiem zajętości pamięci. Obliczanie ciągu Fibonacciego w zwykłej rekurencji jest dobrym przykładem.
Po drugie RafalS dał link w którym widać, że obie metody zajmują tyle samo pamięci. 

Podobne pytania

0 głosów
1 odpowiedź 238 wizyt
–1 głos
3 odpowiedzi 417 wizyt
0 głosów
1 odpowiedź 475 wizyt
pytanie zadane 22 października 2017 w C i C++ przez Corvette 653 Początkujący (400 p.)

92,555 zapytań

141,402 odpowiedzi

319,541 komentarzy

61,939 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!

...