Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
025
09.10.2002, 16:29
apfelkorn



lern c++

--

zum Seitenanfang zum Seitenende Profil || Suche
026
09.10.2002, 18:38
Archangel



Zitat:
snoopdog postete
@ Zeeke hab ich doch geschrieben, 3000 Befehle, naja sidn eigentlich keine Befehle sodnern Funktionen.

Wer lesen kann ist klar im Vorteil :)

mh, ich zähl trotzdem nur ~136 funktionen in der C standard library.. und davon die makros noch mitgezählt o_O

@CN: hast du dein reply mitgezählt ? ich weiß nich wieso so viele umsonst sein sollen, hier wird doch wohl vernünftig diskutiert..

naja außerdem wieso will Diter nur ne befehlsreferenz, kein tut ? selbst n tut is imho nich genug, da sollte man sich schon n richtiges buch (K&R für C, The C++ programming language für C++) kaufen..

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005


Dieser Beitrag wurde am 09.10.2002 um 18:39 von Archangel bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
027
09.10.2002, 23:42
Diter



Ich meine etwas in der Richtung von Selfphp.
(Fuer Leute die Programmieren koennen(in anderen Sprachen) und die Befehle/Syntax nachgucken wollen)

Ausserdem waer es sehr freundlich, wenn ihr Compieler empfehlen koenntet

THX The ScarryOne

--

anywhere
nowhere
und er fragt es doch...
Wie man postet...

zum Seitenanfang zum Seitenende Profil || Suche
028
10.10.2002, 07:10
Zeeke



www.bloodshed.net

Da gibt es DevC++ (benutzt Mingw).. ist ganz ok soweit...

Kannst dir ja mal soetwas anschaun: http://www.volkard.de/vcppkold/inhalt.html

Ciao

--

zum Seitenanfang zum Seitenende Profil || Suche
029
10.10.2002, 13:55
Prefect



Ich glaube das "umsonst" war auf Diters Post bezogen, denn ganz offensichtlich hat er die Replies nicht gelesen (sie hätten seine Frage nämlich ziemlich ausführlich beantwortet).

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
030
10.10.2002, 14:23
snoopdog



hmm also ich hab jetzt mla nen kleinen C und C++ Test gemacht, einfach nur ne Schleife die raufzählt, was ganz einfaches, nur ich kam auf komsiche Ergebnisse also hier der C code:

Quellcode:
#include <stdio.h>
#include <windows.h>

int i;

void main()
{
    int a,b;

    a = GetTickCount();
    for(i=0;i<651000;i++)
    {
        printf("%d\n",i);
    }
    b = GetTickCount();

    int c;

    c = b - a;

    printf("%d\n",c);
    char *ds;
    gets(ds);
    
}

_______________________________________

und hier der c++ code

#include <stdio.h>
#include <windows.h>

class test
{
public:
    void counter();
private:
    int i;
};

void test::counter()
{
    int a, b, c;

    a = GetTickCount();

    for(i=0;i<651000;i++)
    {
        printf("%d\n",i);
    }

    b = GetTickCount();

    c = b - a;

    printf("%d\n",c);
    char *ds;
    gets(ds);
}
void main()
{
    class test test;

    test.counter();
}

so ich habe erst 5 mal das c++ programm durchlaufen lassen

1. 23233
2. 43813
3. 46336
4. 24134
5. 36392

der Durchschnitt 34781,6
und hier nun 5 mal C

1. 27940
2. 45415
3. 40198
4. 25436
5. 37213

Durchschnitt 35240,4

Also am Durshcnitt sieht man das C++ etwas schneller ist, aber warum so große Geschwindigkeitstestdurchläufen?? Ich habe nix nebenbei gemacht, netmal die Maus bewegt, keine Musik gehöt, nix.

Was sagen denn die Experten dazu??

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
031
10.10.2002, 15:21
Kriz



Kommt auf den Compiler drauf an, wie er den Maschinencode noch nachträglich optimiert... Normalerweise erzeugt C++ von Natur aus mehr Overhead als C, aber wenn der Compiler geschickt alles Unnütze rausfummelt und den Rest kompakt zusammenkloppt, dann kann selbst ein C++ Programm u.U. schneller sein als ein C Programm und natürlich umgekehrt. Das beim obigen Beispiel C++ schneller ist als C, verwundert mich aber ein wenig. Schließlich muß das Programm zur Laufzeit in C++ die Klassen/Methodenreferenzen verwalten und verknüpfen. Da C meist auf globalen Aspekten basiert, ist der Geschwindigkeitszuwachs bei der C++ Variante schon merkwürdig. Mit was hast du die Programme kompilieren lassen? VC++, GCC odda-wodda?

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
032
10.10.2002, 15:32
Diter



Zitat:
CN postete
21 replies -> alle umsonst

Wieso, das meiste waren nur spekulationen, was schneller ist...?
The SCarryOne

--

anywhere
nowhere
und er fragt es doch...
Wie man postet...

zum Seitenanfang zum Seitenende Profil || Suche
033
10.10.2002, 16:04
snoopdog



jup mit vc 6.0 enterprise.
mich wundert besonders, das sich die Geschwindigkeit überhautp so unterscheidet, mal nur 25 sekudnen dann aber im nächsten Durchlauf 40 sek.

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
034
10.10.2002, 17:19
Tron



@snoopdoog:
die messergebnisse kannst in die tonne kloppen, mit den messvarianzen so gros sind, das ist - gelinde gesagt - datenmuell.
woher die messfehler allerdings stammen, ist mir auch schleierhaft.

zudem sagt deine testmethode _nichts_ aus, da du 2mal exakt das selbe auf die selbe weise machst, da die schleife mit printf wohl 99.99...% der zeit in anspruch nimmt, und das hat nichts mit einem algorithmus zu tun, der einmal prozedural und einmal oo realisiert ist.
selbst wenn dein test stabile messergebnisse erzeugt haette, wuerden sie nichts aussagen.

@kriz:
tschuldigung, aber du laberst schrott.

Zitat:
Normalerweise erzeugt C++ von Natur aus mehr Overhead als C

es gibt keinen gehehmeinen, staendig bremsenden c++-overhead, das ist nonsens.

Zitat:
Schließlich muß das Programm zur Laufzeit in C++ die Klassen/Methodenreferenzen verwalten und verknüpfen

das ist mir auch schwer schleierhaft, was soll das heissen? das klingt eher nach dynamischen binden, also .dlls, als nach objektorientierung.

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
035
10.10.2002, 17:27
snoopdog



hmm @ Tron wenn du meinst, mit printf... ok nur dann sag mir mal bitte wie ich z.B. ne komplizierte Rechnung mache die viel Zeit in Anspruch nimmt und die dann ohne printf ausgebe??und das auf oop bzw C code also struktoriert.

--

Visit our 500er Gamer Lan
@ www.evil-lanparty.de or
@ www.evil-havoc.com
Visit the HaVoc Lanparty Community
@ www.havoc-lanparty.com

zum Seitenanfang zum Seitenende Profil || Suche
036
10.10.2002, 18:48
Prefect



Diter: Das meiste waren _keine_ Spekulationen, sondern Posts, die versucht haben mehr oder weniger klar zu machen, daß der Geschwindigkeitsunterschied scheißegal ist, wenn es denn überhaupt einen gibt. Und einem Anfänger sollte er sowieso noch scheißegaler sein.

Tron: Doch, einen versteckten Overhead gibt es in C++, und zwar Exceptionhandling und Framesetup usw.
C++-Code, der Exceptions verwendet (also ohne spezielle Compilerflags _aller_ Code) muß Stackframes unterhalten. In den meisten Fällen ist das egal, aber wenn eine Funktion konstruierte Objekte auf dem Stack hat fügt zumindest gcc unter manchen Umständen Code ein, der bestimmte Flags setzt/löscht, sobald Objekte konstruiert sind. In Verbindung mit den Stackframes wird wahrscheinlich auch der Optimizer minimal in seinen Möglichkeiten eingeschränkt.
Klar, viel ist das nicht, und in engen Inner-Loops dürfte dieser Overhead gar nicht existieren, aber er ist prinzipiell durchaus da.
Und selbst wenn es keinen Runtime-Overhead gibt gibt es mindestens einen Size-Overhead für die globalen Strukturen mit den Stackframes.

Diese Argumentation ist natürlich nur für Code relevant, der eigentlich kein Errorhandling bräuchte. Sobald man Errorhandling in C implementiert braucht man if()-Statements und damit Conditional Jumps, und dann ist der Runtime-Overhead des entsprechend C-Codes sehr wahrscheinlich größer als der des C++-Codes, denn der C++-Code mit Exceptions kommt ohne Branches aus.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
037
10.10.2002, 19:14
Tron



da c implizit kein exception handling hat ist das ein vergleich zwischen aepfeln und birnen.
wie du gesagt hast: per option exceptions ausschalten und gut ist.
oder deinen code mit nothrow pflastern (aber das sollte ein guter compiler auch erkennen, falls eine funktion keine exception werfen kann und entsprechend die exception spaese weglassen)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche
038
10.10.2002, 19:39
Kriz



@Tron: Es geht bei Klassen und Methoden um die Art des Zugriffs. Statische Zugriffe laufen schneller ab als dynamische Zugriffe, virtuelle Zugriffe sind langsamer als nichtvirtuelle Zugriffe, mutable-Elemente verzögern den Ablauf, während auf konstante Elemente wiederum schneller zugegriffen werden kann usw.

Das Klassenkonstrukt als Abart der Strukturkonstrukte ist durch das OOP eben ein aufwendigeres Verfahren als simples global/lokal Rumgehampel, aber das weißt du ja eh selber.

Btw: Der Overhead ist in C++ da (Begründung siehe oben)... Aber ich scheiße auf den Overhead und gebe dem OOP als Modellierungsform den Vortritt. Da pfeif ich auf das bißchen Mehr-Code im Programm!

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
039
10.10.2002, 20:13
Tron



Zitat:
Kriz postete
@Tron: Es geht bei Klassen und Methoden um die Art des Zugriffs. Statische Zugriffe laufen schneller ab als dynamische Zugriffe, virtuelle Zugriffe sind langsamer als nichtvirtuelle Zugriffe, mutable-Elemente verzögern den Ablauf, während auf konstante Elemente wiederum schneller zugegriffen werden kann usw.

Das Klassenkonstrukt als Abart der Strukturkonstrukte ist durch das OOP eben ein aufwendigeres Verfahren als simples global/lokal Rumgehampel, aber das weißt du ja eh selber.

Btw: Der Overhead ist in C++ da (Begründung siehe oben)... Aber ich scheiße auf den Overhead und gebe dem OOP als Modellierungsform den Vortritt. Da pfeif ich auf das bißchen Mehr-Code im Programm!

virtuell, mutabel und konstant sind paradigmen, die c nicht (implizit) kennt, das ist wieder ein aepfel-birnen-vergleich.
zudem haben mutabel und konstant nicht wirklich was mit oo zu tun.
wenn man so etwas wie eine virtuelle methode in c implementieren moechte, dann muss man das ueber einen funktionszeiger machen und das macht keinen unterschied zu c++, das es ja auch ueber funktionszeiger realisiert, nur eben uebernimmt das ein sprachenkonstrukt und man muss sich nicht explizit darum kuemmern.

bisher konnte mir niemand zeigen, dass c++ in einem gebiet langsamer sein _muss_ als c.

mal ein kleines beispiel, was ich mir als einen vergleich vorstellen wuerde:

Quellcode:struct c_vector
{
  float x;
  float y;
  float z;
};

void init(c_vector* v, float x, float y, float z)
{
  v->x = x;
  v->y = y;
  v->z = z;
}

void normalize(c_vector* v)
{
  float l = 1 / sqrt(v->x * v->x + v->y * v->y + v->z * v->z);
  v->x *= l;
  v->y *= l;
  v->z *= l;
}

Quellcode:class cpp_vector
{
  public:
    cpp_vector(float X, float Y, float Z) : x(X), y(Y), z(Z) {}

    void normalize();
    {
      float l = 1 / sqrt(x * x + y * y + z * z);
      x *= l;
      y *= l;
      z *= l;
    }

    float x;
    float y;
    float z;
};

Quellcode:
int main()
{
  c_vector c_v;
  init(&c_v, 1, 2, 3);
  normalize(&c_v);

  cpp_vector cpp_v(1, 2, 3);
  cpp_v.normalize();
}

und warum soll hier nun eines schneller sein als das andere? (und kommt mir jetzt net mit inlining oder sowas, es geht hier um prozedural <-> oo und nicht um wie-toll-ist-mein-compiler)

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett


Dieser Beitrag wurde am 10.10.2002 um 20:14 von Tron bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
040
10.10.2002, 21:37
Kriz



Zitat:
zudem haben mutabel und konstant nicht wirklich was mit oo zu tun.

Das ist richtig, aber konstante Objekte werden definitiv schneller aufgerufen, da ihre Struktur nicht mehr verändert wird. Mutable-Objekte werden langsamer aufgerufen, weil ihre konstante Eigenschaft im Vorfeld temporär deaktiviert wird, ehe sie benutzt werden, um danach wieder konstant gemacht zu werden. Das ist - relativer - Zeitverlust in C++.

OOP als Modell ist erstmal genauso schnell wie prozedural-imperatives Programmieren! Es kommt eben auf das System an, mit dem man OOP umsetzt...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche