Flame aus "Projekte": C oder C++ schneller bei Spieleprogrammierung?



  • Wenn man kein absolutes Genie ist, entdeckt man bei "mehr high-level code" eher noch Schwachstellen im Algorithmus, als bei "low-level code".

    Wenn ich so etwas habe:

    typedef std::list<int>::const_iterator it;
    for( it i = myList.begin();  i != myList.end();  ++i )
        sum += *i;
    

    dann kann ich objektiv sagen, dass es nicht ganz so leicht zu überblicken ist wie:

    foreach( int x in myList )
        sum += x;
    

    Natürlich ist es jetzt in beiden Fällen gut lesbar, aber man kann ja auch mal kompliziertere Schachtelungen haben. Wenn man das auf hunderttausende Zeilen Quellcode überträgt, dann kann man sich durchaus mal ein bisschen vertun und Chancen, den Algorithmus zu optimieren, erstmal verpassen. Und das tut mehr weh als die anderen Kleinigkeiten.



  • Richtig! Optimizer!

    Genau so was mein ich 🙂 🙂 !!!
    Endlich versteht mich einer!

    Ich wollt außerdem noch sagen, dass mann sich bei jedem code-schnipsel überlegen sollte wie der compiler das interpretieren wird. Also ich mach das oft! Leider kann ich asm nur lesen und nicht schreiben und kann daher meinen code hier nicht optimieren.

    Ist sicher auch klar das der codeoptimizer bei dem comipler einiges ein shit code wieder geradebügeln kann, aber ich verlass mich halt nicht so gern auf solche Hilfstools!

    Bsp: Bei meiner Engine hab ich n eigenartiges Logsystem und zwar ist überall ein #ifdef und #endif! So kann ich ganz easy die Logs ein und ausschalten (sind halt 2 builds!) und wisst ihr warum ich das nicht mit if(bLog==TRUE) mach????? na ? genau! weil das mindestens 2 Instructions sind die ich mir anders in der release version erspar (und neben bei auch in der anderen!!)

    Also, es ist ned so das ich komplett keine Ahnung hab wie alle hier denken! Ich hab mich mit dem Zeug schon eingehend beschäftigt und nicht einfach NUR blödsinn gepostet (sicher auch n bissal aber nicht NUR 🙂 )

    naja gut dann hoff ich weiter dass mal jemand wegen dem Projekt was posted!
    (obwohl auch so ne disskusion sehr lehrreich ist 😃 )

    cu Manuelh87



  • aber ich seh immer öfter das Leute ständig für jeden mist ne neue Klasse anlegen und ableiten usw... Und das verlangsamt den Code und zwar erheblich!!!

    1. klassen sind genausoschnell wie structs+funktionen
    2. vererbung muss den code garnicht verlangsamen, erst basisklassenzeiger zeigen spuren im laufzeitverhalten. unnötig zu erwähnen, dass in situationen, in denen man basisklassenzeiger benutzen muss, man auch in C enorme schwierigkeiten hat.
    3. C++ istr nicht alles in Klassen stecken

    class hat meistens nen Construktor! Bei Übergabe gibts dann noch nen Kopierkonstruktor usw. Das alles muss aber auch ausgeführt werden!

    ein ctor Klasse(){} kostet garnichts. Wenn eine Klasse einen ctor braucht, so müsste eine gleichwertige structur auch eine funktion haben, die die werte setzt, bzw die werte werden von hand gesetzt, was die sache a) nicht schneller und b) nicht übersichtlicher macht.
    (dasselbe gilt für den dtor)

    Und zwar performance gründe (und wer das nicht glaubt fragt google) und speicherplatzgründe!

    meinst du die google ergebnisse, die mindestens 10 jahre alt sind?

    Die Gefahr mit C++ ist meines erachtens dass ma klassen zu stark verwendet und der code darunter leidet weil viele c++ coder leider mehr keine ahnung von asm haben!

    genau, jeder der asm kann, kann besseren code erzeugen als der compiler 🙄.
    Getter und Setter werden vom compiler sehr oft in 1-2 ASM befehlen abgehandelt, bei referenzrückgabe wird er aus dem getter wohl nur eine addresse machen

    Bei der klasse verwende ich auch ne virtuelle FUnktion, ganz einfach weil sichs für das Problem angeboten hat. Aber viele Leute verwenden sie halt nicht günstig und das verlangsamt den code auf jedenfall und das ist meiner meinung nach das problem mit c++!

    das problem an C++ ist,dass es so komplex ist, dass viele leute nicht wissen, wann man welche Sprachfeatures am besten einsetzt, und der code darum grottenschlecht ist.

    mit cout und so! Wo ist das bitte stabiler?

    genau da, wo man generischen code schreiben will

    template<class T>
    void gibAus(T var){
        cout<<var;//funktioniert mit jedem T
    }
    //mit printf
    template<class T>
    void gibAus(T var){
        printf(%i,var);//was passiert wohl bei double...
    }
    

    nebenbei gesagt, dass cout problemlos auch mit jedem objekt klarkommt, welches den op<< überladen hat, und somit eh besser zu nutzen ist als printf

    und ist die klar was cout<<"hallo"<<" "<<"welt" für code produziert? Und was das für Speicher braucht 😮 ?? Ich galub nicht sonst würds cout ned besser finden als printf() oder irr ich mich und red grad blödsinn?
    (Kann ja mal vorkommen 🙂 )

    das ganze verbraucht genau 11 Byte speicher("hallo welt"+\0), da der buffer aber nur eine sehr limitierte speicherkapazität hat(meines wissens nach 40Byte), fällt das sogut wie garnicht ins gewicht.



  • Bei dem meisten stimm ich dir zu aber
    10 Byte???? bist du irre 😕 allein printf braucht sicher 500 byte!!!
    Ich mein Stack nicht wie viel der String hat!!! da is n unterschied!! Und wenn du für jedes mal werte übergeben den Kopierkonstruktor aufrufs braucht das serwohl mehr speicher.
    Mit dem Rest bin ich eigentlich einverstanden 🙂 ! Das mit den klassen und wie ich das mein ist ja anscheinend auch klar geworden und :
    ich weiß schon das man mit c++ nicht nur klassen machen kann, es ist aber ein wesentlicher unterschied zu C. ICh mag C++ wegen der Freiheit alles zu machen: man kann asm, c und c++! (Das einzige was mich nervt sind typecasts wie long* auf void* aber das geht in C++ nicht anders wegen eindeutigkeit von funktionen und bla bla blaa...)

    Weiterhin stell ich die Frage ob den niemand an meinem Projekt interesse hat?? 😞

    niemand?? 😞 😞
    wirklich niemand? 😞 *traurigsei*

    :xmas1:
    cu Manuelh87



  • und wisst ihr warum ich das nicht mit if(bLog==TRUE) mach????? na ? genau! weil das mindestens 2 Instructions sind die ich mir anders in der release version erspar (und neben bei auch in der anderen!!)

    Auch das ist nicht so ganz richtig. Der Compiler ist durchaus in der Lage, Konstanten einzusetzen und if's entsprechend gleich richtig auszuwerten.
    Du denkst zu low-level. Optimiere das, was der Compiler nicht kann (Algorithmen) und lass von dem anderen Zeugs die Finger.
    IMHO kennst du dich damit noch nicht ausreichend gut aus und du unterschätzt außerdem die Compiler deutlich.

    Und bitte, verwende weniger Ausrufezeichen. 😉



  • Manuelh87 schrieb:

    aber ich seh immer öfter das Leute ständig für jeden mist ne neue Klasse anlegen und ableiten usw... Und das verlangsamt den Code und zwar erheblich!!!

    Nein, tut es nicht. Dass das Arbeiten mit Klassen langsamer ist, war früher so. Aber damals gab es auch noch keine Compiler, die gut optimierten. Ich geb dir aber insofern recht, dass man es mit Klassen auch übetreiben kann.

    Manuelh87 schrieb:

    Es gibt serwohl nen unterschied zwischen class und typedef struct!!!
    class hat meistens nen Construktor! Bei Übergabe gibts dann noch nen Kopierkonstruktor usw. Das alles muss aber auch ausgeführt werden!

    Richtig, eine Klasse hat immer einen copy-ctor (sofern der Compiler in der Lage ist einen zu erzeugen), und wenn du keine ctors selber definierst, auch einen default-ctor. Diese werden aber wegoptimiert, sofern sie nichts tun. Zumindest ein brauchbarer Compiler macht das so.

    Manuelh87 schrieb:

    In C dagegen wird nur ne Addresse gepusht! das is ne funktion vom cpu und geht schneller alles der jump zum Konstruktor und dann dort noch der ganze code!

    Dies zeigt wirklich, dass du von C++ nicht allzu viel Ahnung hast. (nicht persönlich nehmen)

    Manuelh87 schrieb:

    Außerdem:
    Hab ich ja nix gegen C++ und code auch meistens in C++ aber ich versuche wenige klassen zu verwenden! nur wenns wirklich sinnvoll ist! Ich code aber auch viel C (für TI) und es gibt gründe warum dort kein C++ gibt! Und zwar performance gründe (und wer das nicht glaubt fragt google) und speicherplatzgründe! Also erklärt mir nicht dauernd das das genau gleich ist! (Außer Beispiel oben 😉 )

    Tatsächlich. OK, ich geb dir mal ein kleines Programm, davon kannst du ja mal die Geschwindigkeit testen (sekundengenaue Stoppuhr reicht 🙂 )

    // C Version
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #define LOOP_COUNT 100000
    
    char s[5 * LOOP_COUNT + 1];
    
    int main(void)
    {
    	const char* add_strings[] = {"blah", "bleh", "blih", "bloh", "bluh"};
    	srand((unsigned int) time(NULL));
    	s[0] = '\0';
    	for (size_t i = 0; i != LOOP_COUNT; ++i)
    	{
    		strcat(s, add_strings[rand() % 5]);
    	}
    	printf("%c\n", s[rand() % (5 * LOOP_COUNT)]);
    	return 0;
    }
    
    // C++ Version
    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    int main()
    {
    	const std::size_t LOOP_COUNT = 100000;
    	const char* add_strings[] = {"blah", "bleh", "blih", "bloh", "bluh"};
    	std::srand(static_cast<unsigned int>(time(NULL)));
    	std::string s;
    	s.reserve(5 * LOOP_COUNT);
    	for (std::string::size_type i = 0; i != LOOP_COUNT; ++i)
    	{
    		s += add_strings[rand() % 5];
    	}
    	std::cout << s[rand() % (5 * LOOP_COUNT)] << std::endl;
    	return 0;
    }
    

    Ist wie gesagt alles eine Frage der Implementierung und der verwendeten Algorithmen. 😉

    Manuelh87 schrieb:

    Die Gefahr mit C++ ist meines erachtens dass ma klassen zu stark verwendet und der code darunter leidet weil viele c++ coder leider mehr keine ahnung von asm haben!

    Hast du dich mal gefragt warum das so ist? Nun ich sag es dir, Assembler ist plattformabhängig, C++ (wie auch C) nicht. Zudem macht es weniger Sinn am Code selbst (also mit Assembler Ersetzungen) zu optimieren, als an den verwendeten Algos.

    Manuelh87 schrieb:

    Bei der klasse verwende ich auch ne virtuelle FUnktion, ganz einfach weil sichs für das Problem angeboten hat. Aber viele Leute verwenden sie halt nicht günstig und das verlangsamt den code auf jedenfall und das ist meiner meinung nach das problem mit c++!

    Noch ein Irrglaube. Rein assemblertechnisch besteht der Unterschied beim Aufruf einer virtuellen Funktion ja in folgendem

    ; normale Funktion
    call foo
    ; virtuelle Funktion
    mov eax, bar
    call [eax + xx]
    

    Und das ist mittlerweile unerheblich. Dadurch heutige CPUs (x86-32/x86-64/ia64) mehrere Instruction-Pipelines besitzen kann durch entsprechende Code-Anordnung beides gleich schnell sein. Der einzige Nachteil von virtuellen Funktionen ist der, dass nicht geinlined werden kann. Aber wenn du in C++ eine virtuelle Funktion brauchst, dann brauchst du auch in C etwas vergleichbares.

    Manuelh87 schrieb:

    Also, ich hab nix gegen C++ und bin mir dessen bewusst, dass wenn man mit MSVC in c++ wie in c schreibt die gleichen ergebnisse erhält!

    Darüber redet ja gar niemand, ich zumindest nicht. Siehe Bsp oben.

    Manuelh87 schrieb:

    Meine Gründe die Engine in C zu schreiben hab ich ja auch erläutert oder? Ich schreib sie auch für einen Freund der in VB coded und dort tut er sich leichter mit einzellnen Funktionen denke ich 👍 !

    Niemand sagt etwas dagegen, dass du deine Engine in C schreibst. Nur das mit Geschwindigkeit zu begründen ist überholt.

    Manuelh87 schrieb:

    Fast hätt ichs vergessen!
    mit cout und so! Wo ist das bitte stabiler?

    Niemand hat von stabiler gesprochen. cout und co ist einfach typsicher, printf und co nicht. Bsp

    int a = 10;
    printf("%s", a); // hoppla "%s" muesste ja eigentlich "%d" sein - das kriegst du aber erst mit, wenn dein Programm abstuerzt
    std::cout << a; // cout "erkennt" den Typ selbst, weiss also, dass es ein int und kein String ist
    char buf[16];
    scanf("%s", buf); // hoppla, der Benutzer hat mehr als 15 Zeichen eingegeben und mein Programm stuerzt ab - was nun?
    std::string s;
    std::cin >> s; // kein Problem, der Benutzer kann Zeichen einlesen lassen, bis sein Speicher voll ist
    

    Manuelh87 schrieb:

    und ist die klar was cout<<"hallo"<<" "<<"welt" für code produziert? Und was das für Speicher braucht 😮 ?? Ich galub nicht sonst würds cout ned besser finden als printf() oder irr ich mich und red grad blödsinn?
    (Kann ja mal vorkommen 🙂 )

    Ja, du redest Blödsinn. Mir ist schon klar, was der Compiler hier macht. Nur schreibt kein vernünftiger C++ Programmierer sowas. Wenn du die String Literale trennen willst, dann kannst du das auch so machen

    std::cout << "hallo" " " "welt";
    


  • if auswerten vorzeitig???? Das kann ich mir beim besten willen nicht vorstellen. (Kein Ausrufezeichen 😃 ) => müsst ich mal probieren
    (*nachdenk* sinnvoll wärs bei einem vergleich der sorte "const i=3; if(i==3)" schon aber ich weiß nicht ob das der lcc machen würd?)

    Dann stell ich dir noch ne frage: was ist besser compiler überschätzen oder unterschätzen?

    Da bin ich nicht deiner Meinung. ICh finde es ist wichtig zu wissen was man coded und wie das dann nachher aussieht. Und beim lcc compiler schau ich mir die assemblys doch an.

    cu Manuelh87



  • Manuelh87 schrieb:

    if auswerten vorzeitig???? Das kann ich mir beim besten willen nicht vorstellen. (Kein Ausrufezeichen 😃 ) => müsst ich mal probieren
    (*nachdenk* sinnvoll wärs bei einem vergleich der sorte "const i=3; if(i==3)" schon aber ich weiß nicht ob das der lcc machen würd?)

    Konstante Variablen werden in Release builds sowieso in den meisten fällen direkt vom Compiler durch den eigentlichen Wert ersetzt (besonders bei built-in typen), funktionieren also ähnlich wie #define's, sind aber typensicher.

    Manuelh87 schrieb:

    Dann stell ich dir noch ne frage: was ist besser compiler überschätzen oder unterschätzen?

    Beides schlecht. Niemand hat behauptet, dass ein Extrem besser ist. Die beste Lösung ist, den Compiler richtig einzuschätzen. Dann kann man den Compiler nämlich den ganzen low-level Kram machen lassen (was ja auch zeitaufwändig ist) und sich selbst, wie schon einige andere geschrieben haben, eher auf geeignete Algos konzentrieren.



  • @otze und teileweise ach @andere

    danke. genau das wollte ich auch sagen. leider war ich zu langsam.

    @manuelh87

    ich kann dich gut verstehen. ich bin auch der meinung, das man ein wenig assembler können sollte, damit man versteht, was man macht.

    deine argumente bezüglich geschwindigkeit scheinen mir aber nicht allgemeingültig zu sein. vielleicht hast du schlechte erfahrungen gemacht und jetzt eine falsche vorstellung davon wie schnell c++ wirklich ist.

    bestimmt gibt es situationen wo c-code minimal schneller als vergleichbarer c++-code ist. aber sind solche vergleiche überhaupt wichtig? ich glaube nicht. man muss sich immer fragen was man will.

    will man ein experte darin sein, die unterschiedlichen compiler und ihre übersetzungen von c/c++-code in maschinencode auswendig zu kennen, um somit maximal schnellen code schreiben zu können der im millionstelbereich schneller ist?

    oder will man ein experte im coden von (game-) engines sein. da kommt es aber auf ganz andere dinge an, die die engine gut machen (siehe half life 2 und die physik simulationen). bei so komplexen berechnungen wie physiksimulationen spielen die paar takte, die klassen an der ein oder anderen stelle langsamer sind wirklich keine rolle mehr. das ist so, als ob man sich ein haus bauen will und sich gedanken darüber macht, ob der kleine kieselstein links vorne am teich richtig platziert ist :). eine (game-) engine muss viele features haben damit das spiel spass macht und einen beeindruckt. wenn das der fall ist, dann spielt es keine rolle, ob man im durchschnitt 120 (c++ grottenschlecht) oder 140 (c hackerstyle) fps hat, vorallme für diejenigen, die die engine überhaupt nicht kennen und sie nur "benutzen".

    gruß

    kx2



  • Manuelh87 schrieb:

    if auswerten vorzeitig???? Das kann ich mir beim besten willen nicht vorstellen.

    Glaub es lieber. Compiler können auch Schleifen komplett auflösen und eine Anweisung einfach mehrmals ausführen, wenn die Anzahl der Durchläufe klar ist. Compiler können so unglaublich viel, das kannst du dir nicht vorstellen. Und sie werden immer mehr können.
    ➡ Optimiere Algorithmen, das wird der Compiler niemals können. Alles andere macht er jetzt schon besser als du. Du musst verdammt gut Assembler können um noch besseren Code zu produzieren als ein Compiler. Das trifft auf dich mit Sicherheit nicht zu...

    Dann stell ich dir noch ne frage: was ist besser compiler überschätzen oder unterschätzen?

    Wieso ist dir das so wichtig? Es ist _scheiBegal_, in 99,9% der Fälle, ob der jetzt ein if rausmacht oder nicht. Und so wie du dich anhörst, bist du glaube ich nicht in der Lage, das restliche 0,1% rauszufinden. Glaub es oder nicht, aber für so etwas braucht man heute kaum noch einen Programmierer.

    Da bin ich nicht deiner Meinung. ICh finde es ist wichtig zu wissen was man coded und wie das dann nachher aussieht. Und beim lcc compiler schau ich mir die assemblys doch an.

    cu Manuelh87

    Ich habe nirgendwo gesagt, dass es meine Meinung ist, dass man darüber nicht bescheid wissen sollte.



  • Es tut mir weh, wenn sich die C und C++ Fraktion so zerstreitet.
    Können wir nicht über den Bastard C# weiterlästern?



  • Manuelh87 schrieb:

    if auswerten vorzeitig???? Das kann ich mir beim besten willen nicht vorstellen. (Kein Ausrufezeichen 😃 ) => müsst ich mal probieren
    (*nachdenk* sinnvoll wärs bei einem vergleich der sorte "const i=3; if(i==3)" schon aber ich weiß nicht ob das der lcc machen würd?)

    Für deine beschränkte Vorstellungskraft können wir hier nichts. Lies mal http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options, vielleicht gehen dir dann die Augen auf, wie viel mehr noch optimiert werden kann.



  • SeppSchrot schrieb:

    Es tut mir weh, wenn sich die C und C++ Fraktion so zerstreitet.
    Können wir nicht über den Bastard C# weiterlästern?

    C# ist gut. so thema beendet 😉



  • mybitmap.DrawLine(0,0,0,0);

    ist mindestens genauso schnell wie ein:

    DrawLine(0,0,0,0,&myBitmap);

    (eher schneller, da der kompiler den "klassen parameter" selber generiert, und somit vielleicht besser optimieren kann)

    ... und weil die Variable myBitmap durch die fehlende Übergabe nicht auf den Stack geschrieben und danach innerhalb der Funktion wieder ausgelesen muss sondern nur gelesen werden muss.

    class hat meistens nen Construktor!

    Na und? In C habe ich zwar keinen Konstruktor, aber ich muss die notwendigen Initialisierungen (z.B. Speicher anfordern, Dateien öffnen, ...) die ich bei C++ im Konstruktor mache in einer anderen Funktion machen.
    Ich weiß allerdings nicht ob eine Klasse ohne Konstruktor genauso wie eine Struktur übersetzt wird.

    Meine Gründe die Engine in C zu schreiben hab ich ja auch erläutert oder? Ich schreib sie auch für einen Freund der in VB coded und dort tut er sich leichter mit einzellnen Funktionen denke ich !

    klar, es soll jeder programmieren wie er will. Ich wollte lediglich sagen, dass ich nicht glaube dass C an sich Geschwindigkeitsvorteile gegenüber C++ bringt.

    Bei meiner Engine hab ich n eigenartiges Logsystem und zwar ist überall ein #ifdef und #endif! So kann ich ganz easy die Logs ein und ausschalten (sind halt 2 builds!) und wisst ihr warum ich das nicht mit if(bLog==TRUE) mach????? na ? genau! weil das mindestens 2 Instructions sind die ich mir anders in der release version erspar (und neben bei auch in der anderen!!)

    Sowas mache ich auch nicht zur Laufzeit.



  • gcc != lcc

    Außerdem sag ich nix gegen c++ nur gengen c++ nicht richtig einsetzten und habe außerdem meine Gründe schon x-mal erklärt! ich bin halt der meinung das der lcc sehr kompakten code macht aber das ist nicht umbedingt der primere grund für die Wahl (hab ich aber schon erklärt)

    ich find if mit ner constante bescheuert tut mir leid. Das beeinflusst bei mir den Build und gehört daher in die preprozessor spate sprich #if.

    Danke noch an den Moderator das er die Posts getrennt hat 😉 !

    Ich wollte nimals die C - C++ Fraktion unter Beschuss nehmen, sorry!
    Tut mir natürlich auch n bissal weh, is ja ne familie!

    Ich versteh nicht warum ich hier nicht einfach sagen kann wies bei mir is? Ich hab nunmal kein allzu breites sortiment an Compiler MSVC MING32 und lcc und von denen macht hat der lcc den kleinsten code! Ich find ihn eben gut und für diesen Job angebracht 😡 !

    Und bevor ihr mir alle erklärt das ich keine ahnung haben kann weil ich ja erst 7 Posts hab und ihr Profies (einige natürlich ausgenommen) 4000000 heißt das nicht das ihr deshalb euch in Bereichen die ihr nicht wirklich kennt besser seid als jeder andere. Ich bestreite nicht das ich Fehler machen kann aber ich versuch euch jetzt schon mehrere seiten lang meinen Standpunkt mit meinen Erfahrungen und Meinem system zu erläutern und das alles nur weil ich :"verwende C(performance)" geschrieben hab. Mir is es jetzt egal bleibt auf eurer meinung beharren und lasst euch nur ja nix einreden. Ich muss mich natürlich irren den ich hab ja nur die verschiedenen build mit lcc und mit anderen! cout braucht dann natürlich auch nur 11 Byte und am besten ist klassen so viel und unnötig wi nur möglich zu verwenden weil die brauchen eh nix an Geschwindigkeit (am besten immer mit Kopierkonstruktor, der braucht auch nix) und am schluss hoffen wir dann das der gute compiler mit optimizer eine halbwegs lauffähige EXE rausbekommen.

    Also wenn ihr nochimmer der meinung seid das ich natürlich keine Ahnung von all dem hab und nur aus spaß die Engine in C schreib dann kann ich auch damit leben!

    Aber bitte lassen wir doch wirklich die sinnlose Diskussion. Ich denke und da wird mir diesmal hoffentlich jeder zustimmen das C++ einfach ne saugeile sprache ist und echt alles kann was sich der Programmierer nur vorstellen kann.
    (Und das gilt auch für C , klar ned!)
    Ich denke mit diesem Schlusssatz kann jeder leben, aber ich bin offen für Kritik!

    muss jetzt chemi lernen aber werd noch nach dem rechten 😉 sehen, ned!
    Manuelh87



  • Und bevor ihr mir alle erklärt das ich keine ahnung haben kann weil ich ja erst 7 Posts hab und ihr Profies (einige natürlich ausgenommen) 4000000 heißt das nicht das ihr deshalb euch in Bereichen die ihr nicht wirklich kennt besser seid als jeder andere.

    wieso meinst du eigentlich die ganze zeit, wir würden dich wegen deines post counts diskriminieren? im ganzen thread ist kein einziger post in diese richtung gegangen(ausser deinen natürlich).

    ich find if mit ner constante bescheuert tut mir leid. Das beeinflusst bei mir den Build und gehört daher in die preprozessor spate sprich #if.

    na, dann wirst dich aber schwer tun, wenn dir jemand mit template meta programmierung ankommt 🙄

    Ich bestreite nicht das ich Fehler machen kann aber ich versuch euch jetzt schon mehrere seiten lang meinen Standpunkt mit meinen Erfahrungen und Meinem system zu erläutern und das alles nur weil ich :"verwende C(performance)" geschrieben hab. Mir is es jetzt egal bleibt auf eurer meinung beharren und lasst euch nur ja nix einreden. Ich muss mich natürlich irren den ich hab ja nur die verschiedenen build mit lcc und mit anderen!

    nun verhalt dich doch mal etwas erwachsener. Du hastd einen standpunkt, das ist ok. aber genauso wie du die ganze zeit evrsuchst, deinen standpunkt zu verdeutlichen, versuchen wir dir zu zeigen, wieso diese argumente nicht mehr zutreffen, diese stammen nämlich meist noch aus der anfangszeit von C++, und so wie man messungen gegen C++ finden kann, so kann man auch problemlos messungen gegen C finden.

    cout braucht dann natürlich auch nur 11 Byte und am besten ist klassen so viel und unnötig wi nur möglich zu verwenden weil die brauchen eh nix an Geschwindigkeit (am besten immer mit Kopierkonstruktor, der braucht auch nix) und am schluss hoffen wir dann das der gute compiler mit optimizer eine halbwegs lauffähige EXE rausbekommen.

    1. von cout selber war nie die rede, aber die "hallo welt" ausgabe wird nie mehr als 11 byte mit cout brauchen. NAtürlich verbraucht cout selber mehr platz, da der aber nur einmal angefordert werden muss(beim programmstart), ist das auch zu verkraften, vorallem da man mit cout/cin verdammt mächtige biester hat.

    2. dein Klassenblublub entbehrt jeglicher grundlage

    3. ich vertraue meinem compiler der es schafft, die geschwindigkeit meines programms im vergleich debug/release um 50-1xx% zu steigern.



  • @1:
    jo sorry hast recht, hab mich verlesen (paranoyer läst grüßen) der hat ned das gemeint! Danke dast mich darauf aufmerksam machts.

    @2:
    was hat if mit templates zu tun????
    versteh ich ned!

    ich find nur das ma bei sowas ned

    const bLog=TRUE;

    function ....
    {
    ...
    if(bLog==TRUE)
    {
    schreibe_log();
    }
    ...
    }

    schreiben soll und dann das bLog verändern bei dem release build sonder die dafür vorgesehenen präprozessorbefehle verwenden soll:

    #define D_Log

    function ....
    {
    ...
    #ifdef D_Log
    schreibe_log();
    #endif
    ...
    }

    dafür sinds ja da! 😉

    Sorry nochmals wegen vorher, genau lesen wär halt toll*
    Manuelh87



  • Bin selber im Embeddedbereich tätig und bei uns richtet sich die Wahl ob C oder C++ nur nach dem verfügbaren Speicher und nicht nach der Geschwindigkeit der Sprachen weil die im Prinzip nicht viel differieren, im Speicherverbrauch schon und es geht bei uns um µS, also schnell sind wirklich beide Sprachen. Und nie versuchen den Kompiler mit Optimierungen zu überlisten! Moderne Kompiler sind wirklich stark in Sachen Optimierungen: Vor allem was Datenzugriffe angeht, Alignment, Arrays(2 Dimensionale werden zum Beispiel zu Eindimensionalen gemacht wenn die erste Dimension 1 beträgt usw.), Funktionsaufrufen und Vereinfachungen zu tun hat. Es ist wirklich erstaunlich und hätt ich den Assemblercode nicht selber gesehen hätt ich davon auch nur die Hälfte geglaubt.



  • Talla schrieb:

    Bin selber im Embeddedbereich tätig und bei uns richtet sich die Wahl ob C oder C++ nur nach dem verfügbaren Speicher und nicht nach der Geschwindigkeit der Sprachen weil die im Prinzip nicht viel differieren, im Speicherverbrauch schon und es geht bei uns um µS, also schnell sind wirklich beide Sprachen. Und nie versuchen den Kompiler mit Optimierungen zu überlisten! Moderne Kompiler sind wirklich stark in Sachen Optimierungen: Vor allem was Datenzugriffe angeht, Alignment, Arrays(2 Dimensionale werden zum Beispiel zu Eindimensionalen gemacht wenn die erste Dimension 1 beträgt usw.), Funktionsaufrufen und Vereinfachungen zu tun hat. Es ist wirklich erstaunlich und hätt ich den Assemblercode nicht selber gesehen hätt ich davon auch nur die Hälfte geglaubt.

    Tja nur ist mir halt auch portablität wichtig und mein lcc checkt das wahrscheinlich ned so genau. Ihr habts da sicher bestimmte Optimierungen.

    Und was meinst mit den Kompiler mit optimierungen zu überlisten? Meinst du damit den Code selbst optimieren (durch asm oder so) oder was?

    Das mit dem Speicherplatz kenn ich vom Tiv200. da is das auch ne rarität nur kann der compiler keine so tollen optimierungen das ich einfach drauflos coden könnt; da muss ich schon die effectivität im Auge behalten...

    Ist der Assemblercode von euerm system echt so gut wie von einem Assembler geschrieben? Das wär allerdings beeindruckend!
    Andererseits schaust du dir ja die assem.codes an; dass wirst ja ned ohne grund machen...

    Richtig eingesetzt ist c++ natürlich gleichschnell wie C oder vielleicht sogar besser? aber ihr werdet sicher bestätigen das ein schlechter Gebrauch von Klassen für den Code, gerade in eurem Bereich, tödlich ist! oder?

    Manuelh87



  • EnERgYzEr schrieb:

    Nicht alles was John Carmack sagt, ist Gesetz 🙄.

    Ist diese Aussage:

    ??

    Wer weiß es?!?! :xmas1: 👍


Anmelden zum Antworten