PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmeffizienz, C++ vs C aus dem g++



SeeksTheMoon
01-12-2003, 11:43
Wenn ich mit dem g++ ein C++ Programm übersetze, das viel Gebrauch von OO-Mechanismen macht und wenn ich das gleiche Programm in C schreibe, aber ebenfalls mit dem g++ übersetze:
Ist die C-Version dann trotzdem effizienter? DIe Bibliotheken gegen die gelinkt wird, das sind ja alles die gleichen C++ Libs und das C-Programm an sich ist ja auch ein C++ Programm.

peschmae
01-12-2003, 11:47
ich glaube nicht, dass man das einfach so sagen kann. Kommt drauf an, wie gut du den Programm in C/C++ schreibst.

MfG Peschmä

Lin728
01-12-2003, 13:52
Grüssi!

Nun ja, so gesehen übersetzten die beiden Compilier annähernd schnell.
Du darfst aber net vergessen, dass wie du schon gesagt hast, der Codingstyle mit C++ einfach ein ganz anderer ist, wenn du wirklich OOP programmierst.

In C programmierst du im Grunde ähnlich, wie der Prozessor das ganze verarbeitet.

In C++ mit viel OOP kommen die Zeiten hinzu, die ein Object braucht um erzeugt zu werden, virtuelle Methoden.
In Java hat man häufig Probleme mit den Zeiten, die es benötigt ein Object am Heap anzulegen, da nimmt man object-pools....

Die eigentlichen Methoden/Funktioen an sich sollten in etwa gleich schnell sein, da gcc und g++ ja am selben Backend aufbauen...

SeeksTheMoon
02-12-2003, 10:16
ich wollte noch ergänzend sagen: beides wird mit dem g++ übersetzt, obwohl eins der beiden ein reiner C-Code ist.

Jetzt noch eine Frage:
Wie verhält es sich mit der Größe von Strukturen und Klasseninstanzen? Gibt es da auf dem Heap, Stack, sonstwo bei einem der beiden mehr Overhead?
Identischer Inhalt bei Strukturen/Objekte ist ja gleich groß, das ist also egal. Wie sieht es mit der Klasse oder der Struktur selber aus (also dem "Container" für die Daten)?
Wenn ich mir mit sizeof die Größe einer komplett leeren Struktur und einer komplett leeren Klasseninstanz anzeigen lasse, dann ist die bei beiden gleich groß (nämlich 1). Ist das richtig, oder gibt es noch Faktoren, die ich mit sizeof nicht messen kann?
Wenn dort übrigens ein Integer drin ist, warum ist die Größe des gesamten Objekts dann 4 und nicht 5?

wraith
02-12-2003, 11:36
Jetzt noch eine Frage:
Wie verhält es sich mit der Größe von Strukturen und Klasseninstanzen? Gibt es da auf dem Heap, Stack, sonstwo bei einem der beiden mehr Overhead?

Erstmal gibt es keinen Unterschied,ob dort nun class oder struct steht,im Bezug auf Overhead.Beides ist in dem Fall identisch.
In C++ gilt das zero-overhead Prinzip,wenn du etwas nicht brauchst,dann wird dafür auch kein Platz verschwendet.


Wenn ich mir mit sizeof die Größe einer komplett leeren Struktur und einer komplett leeren Klasseninstanz anzeigen lasse, dann ist die bei beiden gleich groß (nämlich 1). Ist das richtig, oder gibt es noch Faktoren, die ich mit sizeof nicht messen kann?

Ja,sizeof einer leeren Struktur oder Klasse isr mindestens 1 (es kann auch größer sein).
Das ist deswegen,damit zwei per new angelegte Instanzen verschiedene Adressen haben.
Andere Faktoren,die noch hinzukommen könnten wären ein Zeiger für die V-Table,wenn du virtuelle Methoden hast.
Plus noch ein Aligment (also eine Ausrichtung der Daten an die Wortgrenzen der CPU).


Wenn dort übrigens ein Integer drin ist, warum ist die Größe des gesamten Objekts dann 4 und nicht 5?
Ja,die 1 ist nur in einer leeren Struktur,die fällt dann weg,wenn du wirklich was in der Klasse hast.

peschmae
02-12-2003, 11:55
steht übrigens für C-Programmierer alles recht detailiert in Thinking in C++

MfG Peschmä