Sephiroth? Balkan @ net
Član broj: 79406 Poruke: 82 *.bi2.dlp121.bih.net.ba.
|
Pa, optimizacija znaci ... optimizacija. Vecinom, rijec je o brzini programa. Brzina na koju se misli je "koliko brzo" program izvrsava svoje glavne zadatke. Za velicinu .exe (ako na to mislis) ne vjerujem da je direktno pvezana sa brzinom, iako naravno ima velik uticaj, jer se ipak mora ucitati u RAM i ostalo, ali na tu temu nek netko kompetentniji odgovori. Sto se tice same brzine, ona zavisi od algoritama primjenjenih u programu, kao i struktura podataka koji se koriste. Ovaj dio price mislim da znas... Sto se tice samog C++, tehnika postoji mnogo, zato i jeste jedan od najbrzih programa u pravim rukama. Mnoge tehnike programiranja (kao virtuelne funkcije, polimorfizam itd...) su mnogo "ubrzane" i optimizovane u samim sistemima danas, tako da veliki dio performasi koji otpada na sistemske pozive sada je smanjen znacajno. Ne bih se zelio upustati u raspravu koji su najsporiji dijelovi jezika, jer jos nisam dovoljno iskusan, ali ti mogu odgovoriti na pitanje vezano za prenosenje po referencama. U samome svome pitanju si i postavio pitanje i skoro dao potpun odgovor. Dodatni razlog je sto se i ne trosi vrijeme na spremenje neke tamo dodatne kopije objekta u memoriji. Sto se tice svih tehnika oko pointera (i referenci) dobitak na brzini je ogroman...
Ipak, sto se tice samog pojma optizacije u danasnjim programima, na to se puno manje poklanja paznje nego nekada (ovdje mislim na "normalno" programiranje). Naravno, jos uvijek je jako vidljiva razlika izmedju 2 programa koji rade istu namjenu ali je jedan losije uradjen a drugi bolje. Stvar je u tome, ako se optimizuje onaj glavni dio programa, ostatak je u 99% slucajeva beznacajan. Ovdje mislim na to da li bi trebao primjenjivati tehnike koju su ti mozda upitne za brzinu, kao polimorfizam, nasljedjivanje, sam OOP pristup, velicine prostih varijabli, pa sve do exception handlinga. Kod optimizacije glavnog dijela programa, evo jednog primjera: kada bi radio neku bazu podataka, ogroman uticaj na performanse bi ti imalo koju bi strukturu podataka koristio... Mozda binarno stablo, vezana lista, B-tree? Kada bi primjenio odgovarajucu strukturu, sa odgovarajucim algoritmima, tu bi ti bilo 90% brzine programa. Ostale stvari vezane za samo sucelje, znaci, koliko je brzo "da korisnik klikne i da taj klik dodje do programa" je nevazno danas (vecinom). Pri ovom primjeru ti NAGLASAVAM da je samo neki teoretski primjer u nedostatku maste za boljim. Sistemi se sve vise danas razvijaju. Brzina procesora povecava, izdaju se sve noviji framework-i koji micu sve veci dio posla sa ruku programera i olaksavaju mu da se koncentrise na zadatak koji zeli da uradi. Ja smatram da je od ogromnog znacaja da se nauce ove neke sitnice u detalje, da bi se kasnije mogle i makroskopski primjeniti na cijeli program, nevazno u kojem se programskom jeziku radilo. Ljudi najvise grijese kada pricaju gluposti tipa: pointeri u glupost, Java je bolje jer nema pointera (a sami ne znaju niti zasto ih nema) itd. Ja nisam netko ko kaze da se treba uciti od asemblera pa nadalje, ali je definitivno korisno u buducnosti da se ima mozak naviknut na memory managment, pointere itd. Malo offtopic, znam, ali smatram da je u duhu teme korisno... Pozdrav!
|