Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Optiomointi ja nopeus c/c++

KemXy [29.05.2003 10:51:06]

#

Kun koodia kannattaa kommentoida, niin hidastaako se paljon ohjelman suorittamista vai karsiiko kääntäjä tms. ne pois?

Kaikki dokumentit ja oppaat suosittelevat käyttämään mahdollisimman vähän globaaleja muuttujia, mutta parametrien syöttäminen funktioille vie aikaa. Siispä kannattaako sellaisessa ohjelmanpätkässä, jossa nopeus on ehdotonta valttia käyttää globaaleja muuttujia parametrien sijaan?

thefox [29.05.2003 11:09:53]

#

Kommentit eivät hidasta ohjelmaa, eivätkä kasvata binäärin kokoa.

Mitä tulee optimointiin, niin sitä kannattaa harrastaa järkevästi. Ei ole mitään järkeä optimoida window-handlereita yms. Optimoinnit kannattaa siis kohdistaa vain niihin todellisiin pääalgoritmin pullonkaulakohtiin, kannattaa kokeilla profilerin käyttöä.

Funktioiden inlinetystä kannattaa myöskin käyttää hyväkseen. Näin päästään eroon parametrien syöttämiseen (ja itse funktion kutsumiseen) kuluvasta ajasta. Toisaalta, globaalit muuttujat ovat aina _hieman_ nopeampia kuin paikalliset, koska paikalliset aksessoidaan ebp:n kautta.

Tosiaan, profileri on hyödyksi nopeuksia testaillessa, oman pienen testisysteemin voit väsätä vaikkapa käyttämällä rdtsc-mnemonikkia inline-asmissa.

Ääh. Kylläpä tuli taas sekavaa tekstiäa, no..

weicco [29.05.2003 11:31:43]

#

Kannattaa myös muistaa, että ei anna muuttujia valueina (mitä tuo on suomeksi) vaan pointtereina tai referenceinä, jolloinka muuttujia ei kopioida stackkiin. Stack-overflow on hyvin ikävää PDA laitteille koodattaessa.

Funktioiden inlinetys kasvattaa ohjelman kokoa ja tästä jotkut käyttöjärjestelmät eivät pidä. Pitää myös muistaa, että joissain käyttöjärjestelmissä ei myöskään tunneta globaaleja muuttujia.

Tosin Win32:lle koodatessa tällaisilla asioilla ei ole mitään väliä. Kyllä Intel prosessoreja tuottaa ja muistia on "tarpeeksi".

thefox [29.05.2003 11:36:19]

#

Win32:lle yleisesti ottaen jos annat vaikka olioita / structeja funktiolle parametrina niin ihmeessä osoittimena tai viittauksena. Neljä tavua tai alle olevat on sama pökkiä "as is", sillä se pointteri kuitenkin veisi tuon neljä tavua (ja sitten jouduttaisiin vaan turhaan kaivamaan itse funktiossa ensin itse pointteri ja sitten vasta voitaisiin repiä itse arvo esille).

edit: ja pätee toki muillekin kuin Win32:lle, pointtereiden koot sitten vaihtelevat tietysti...

weicco [29.05.2003 14:28:25]

#

Tjooh.. Ja vielä jos sekoitetaan soppaa, niin const korrektiuus kannattaa opetella (itsekin yritän saada sitä päähäni). Constiksi määrittäminen voi nopeuttaa toimintoja, mutta väärin käytettynä ne voi jopa hidastaa ohjelmaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta