Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Grundsatzfrage zu Klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.11.2007, 12:02 Uhr
FunnyDingo



Hallo zusammen,

vielleicht habe ich das einfach irgendwo überlesen, aber wie sieht es denn mit dem Speicherverbrauch von Klassen aus? Folgende Situation: ich schreibe eine ziemlich große Klasse Namens httpConnection. Wie der Name schon sagt, soll die Klasse eine eingehende Verbindung nach dem HTTP-Protokol abbilden. Nun schreibe ich den ganzen Code zum parsen des Headers etc. mit in die Klasse. Nun stelle ich mir aber die Frage: macht das Sinn? Liegt dann vielleicht für jede einzelne Instanz der gesamte Code zum parsen im Speicher oder wird Programmcode nur einmalig abgelegt und der this-Zeiger zeigt dann auf den Speicherbereich in dem die Member-Variablen der aktuellen Insatz liegen?

Vielleicht eine triviale Frage, aber mir bereitet die gerade ziemliches Kopfzerbrechen.

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.11.2007, 12:58 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Der Programmcode (OK, Klassenvariablen auch) wird grundsaetzlich nur einmal im Speicher abgelegt, nur die Variablen werden fuer jede Instanz gespeichert.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.11.2007, 13:08 Uhr
FunnyDingo



Das ist gut. Ich hatte nämlich jetzt die Befürchtung dass mein Klasse (inkl. Programmcode) sagen wir 2MB im Speicherverbraucht. Wenn er nun für jede Instanz den Programmcode neu ablegen würde, wären dass bei 1000 Verbindungen (nur als Rechenbeispiel!) ja 2Gig nur für die httpConnection. Also kann ich ja so weiter machen ;-)

Danke!
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.11.2007, 19:24 Uhr
stephanw
localhorst


Es ist genau so, wie Du es bezogen auf den this-Zeiger beschrieben hast. Der Compiler übergibt dann für

C++:
class Point
{
  int x;
  int y;
public:
  void info() const
  {
     cout << "(" << this->x << "," << this->y << ")" << endl;
  // ...
};

Point p;
p.info();


die Adresse von p an die Funktion info() als versteckten, impliziten Parameter und nennt sie dort "this".

Und weil es diese Funktion im Speicher nur einmal gibt, kann man z.B. auch deren Adresse ermitteln und diese dann über Funktionszeiger aufrufen. Mithilfe der Adressen von Funktionen bastelt der Compiler auch noch so tolle Sachen wie den "virtual"-Mechanismus, so dass Du in Klassenableitungen Funktionen überschreiben kannst.
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 22.11.2007 um 19:24 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: