Pitääkö paikkansa, että protokollia ei pitäis koodata C :lla vaan C:llä?
Olen kuullut tämmöistä perusteltuna sillä, että C-koodin ajaminen on nopeampaa. Onko mahdollista, että siinä on niin olennainen ero?
Olen kuullut tämmöistä perusteltuna sillä, että C-koodin ajaminen on nopeampaa. Onko mahdollista, että siinä on niin olennainen ero?
Vastaukset 7
Vanhimmat
tuollaisen esittäjä ei tiedä asiasta mitään.
>Onko mahdollista, että siinä on niin olennainen ero?
Onhan siinä eroa mutta ei nopeudessa vaan muistinhallinnassa. Hyvä esimerkki siitä on kilpailevat käyttöjärjestelmät.
Windowsilla käytetään c :aa ja Linux on koodattu c:llä. C :n käyttöönottoon myös Linuxilla on ollut kova painostus mutta Torvalds ei anna lupaa.
Käytännön kokemukset puhuvat puolestaan selvää kieltä siitä kumpi on parempi.
"Käytännön kokemukset puhuvat puolestaan selvää kieltä siitä kumpi on parempi."
Kokemukset mistä? Protokollaohjelmoinnista? Mistä kokemuksista puhut ja mitä "paremmuutta" tarkoitat?
jos jotain funtiota/metodia kutsutaan n-kertaa millisekunnissa, alkaa C++:n virtuaali taulukot yms. painaa.
Ja mikään ei estä tekemästä oliolta C:llä
http://www.eventhelix.com/RealtimeMantra/basics/ComparingCPPAndCPerformance.htm
Kokeilin muuten noita esimerkkejä C koodi suoritettaessa luupissa on 40% tehokaampaa kuin C++.
"jos jotain funtiota/metodia kutsutaan n-kertaa millisekunnissa, alkaa C :n virtuaali taulukot yms. painaa. "
No totta mooses molemmilla kielillä voi tehdä pullarakenteen johon tupehtuu kaikki koneet. Samalla logiikalla voin sanoa, että C:llä tietyn *toiminnallisuuden* toteuttaminen on hitaampaa kuin vastaavan toteuttaminen C:llä. Jos väkisin haluaa esim. C :ssa instantioida joka välissä uuden olion, niin saa etsiä syytä hitauteen ihan rauhassa aamulla vessan peilistä.
Järkevästi toteutettuna eroa ei käytännössä ole.
Kannattaa selvittä itselleen, mitä eroa on luokan metodeissa näillä:
procedure Test;
procedure TestV; virtual;
procedure TestD; dynamic;
esimerkit Delphistä/Kylixistä, mutta esim Borland C Builderissa on aivan samat, syntaksi toki on C -kieleen pohjautuvissa hieman erilainen, vaikka tekniikka taustalla on samaa.
Noista tuo Test; luokan metodina on aivan yhtä nopea kuin perinteinen aliohjelma, jolla ei ole mitään tekemistä luokkien/olioiden kanssa.
Tuo virtual on hieman hitaampi, mutta fiksusti suunnitellulla VMT (Virtual Method Table) toteutuksella ero ei ole iso. Muistia nuo VMT:t toki syövät, varsinkin jos toisistaan periytettyjä luokkia on paljon, ja niissä on paljon virtuaalimetodeita.
Sitten on vielä dynamic, joka on hitain, mutta muistin suhteen säästeliämpi kuin virtual.
Mutta, kuten ketjussa joku jo totesikin: omalla ohjelmointityylillä voi vaikuttaa nopeuteen (ja muistinkulutukseen) huomattavan paljon.
Siksi suosittelen kaikille tutustumista myös assembleriin. Vaikket koskaan koodaisi riviäkään assemblerilla, sen osaamisesta on silti hyötyjä:
1. Voit kääntää samamn tehtävän tekevästä rutiinista erilaisia versioita, ja katsoa, millaista koodia kääntäjä mistäkin tuottaa. asm -koodista voi usein päätellä, mikä on tehokas tapa tehdä asioita ja mikä ei.
2. Jos ohjelmassasi on virhe, se käyttäytyy oudosti, tms. niin assemblerin osaamisesta on debuggerin käytön yhteydessä huomattavasti hyötyä.
Monesti virheet ovat sellaisia, että lähdekooditasolla niiden selvittäminen on hankalaa.
Jep näin on, sillä olio toteutus syö resursseja varsin tehokkaasti. Vaikka tarvittavien koodi rivien määrä olio toteutuksella olisi pienempi, niin lopullinen binaari tiedosto on kuitenkin usein huomattavasti isompi. jne.