Protokollaohjelmointi

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?
7788
Äänestä

Muut lukivat myös

Vastaukset 7

Vanhimmat

tuollaisen esittäjä ei tiedä asiasta mitään.

Äänestä

>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.

Äänestä
  • "Käytännön kokemukset puhuvat puolestaan selvää kieltä siitä kumpi on parempi."

    Kokemukset mistä? Protokollaohjelmoinnista? Mistä kokemuksista puhut ja mitä "paremmuutta" tarkoitat?

    Äänestä


  • olio kirjoitti:

    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.

    Äänestä

  • ouasdf kirjoitti:

    "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.

    Äänestä

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.

Äänestä

Kommentoi aloitusta


Hanski25 kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu