Aktuelle Zeit: 12.05.2025, 23:22

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kleines Verständnisproblem
BeitragVerfasst: 17.07.2009, 12:32 
Offline

Registriert: 17.07.2009, 12:27
Beiträge: 5
Hey,
kann mir jemand erklären warum hier...
Code:
IrrlichtDevice *device =createDevice( video::EDT_OPENGL, dimension2d<s32>(640, 480), 16,false, false, false, 0);

...ein Zeiger auf IrrlichtDevice erstellt werden muss? Könnte man dann nicht einfach schreiben:
Code:
Irrlicht Device = createDevice( video::EDT_OPENGL, dimension2d<s32>(640, 480), 16,false, false, false, 0);

Und dann das ganze natürlich auch auf den folgenden Code anpassen:
Code:
IrrlichtDevice.setWindowCaption();


Das selbe hier.. Ich blick das ganze einfach nicht durch:
Code:
IVideoDriver* driver = device->getVideoDriver();
   ISceneManager* smgr = device->getSceneManager();
   IGUIEnvironment* guienv = device->getGUIEnvironment();

Für was braucht man diese ganzen Zeiger??
Ich hoffe, dass mir jemand helfen kann,
Danke schon mal im Vorraus,
mfg
Georg


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kleines Verständnisproblem
BeitragVerfasst: 17.07.2009, 13:56 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
die zeiger werden überall verwendet, da dynamischer speicher ökonomischer ist, er wird reserviert und wieder freigegeben, je nachdem wie er vom programm gebraucht wird.
instanzen auf dem heap zu erzeugen funktioniert in c++ mit dem schlüsselwort new, das resultat ist ein zeiger auf den beginn des speicherbereichs des objekts.
alles auf dem stack zu speichern wäre einfach nicht effizient.

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kleines Verständnisproblem
BeitragVerfasst: 17.07.2009, 14:59 
Offline

Registriert: 17.07.2009, 12:27
Beiträge: 5
Danke für deine Antwort =)
Leider verstehe ich das nicht ganz, da mit die ganzen Begriffe nicht vertraut sind und ich in C++ auch noch nicht gerade sehr gut bin..
Könntest du mir das etwas einfacher erklären? (Sodass es ein noobie wie ich auch versteht :P)

Danke schonmal,
mfg
Georg


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Kleines Verständnisproblem
BeitragVerfasst: 17.07.2009, 15:49 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Es gibt 2 arten von Speicher, die ein Programm benutzen kann. Einmal den Stack und einmal den Heap.

Wenn du jetzt sagst:
Code:
int i=3;

Dann wird Speicher aus dem Stack genommen.

Wohingegen
Code:
int *i = new int;

Speicher auf dem Heap reserviert.

Für Variablen in einer Funktion ist macht es keinen großen Unterschied ob jetzt heap oder stack. Der Stack wird hier bevorzugt, dass es doch einfacher ist mit normalen Variablen umzugehen als mit Zeigern.

Wenn du jedoch große Datenmengen brauchst, oder dynamischen Speicher brauchst (also zb anhand von Benutzereingaben Variablen erstellt werden), dann kommst du um den Heap nicht rum.
Außerdem ist der Stack meistens arg begrenzt (afaik 2MB oder so), während der Heap quasi unbegrenzt ist (RAM + Auslagerungsdatei). Wenn man sich jetzt mal überlegt, dass eine Textur schon mal einige MB an speicher brauchen kann, dann fällt der Heap ja sowieso schonmal flach.
Außerdem lassen sich interfaces besser mit Zeigern realisieren (in Irrlicht arbeitest du nur mit interfaces. Das heißt du weißt zwar welche Funktionen es gibt, aber du siehst von außen nicht, wie die genau implementiert sind, was du auch nicht brauchst)

Und noch ein Unterschied Heap/Stack. (Wobei das eher Halbwissen meinerseits ist. Ich geb also keine Garantie das das stimmt)
Du kannst nur vom Stack in der Reihenfolge lesen, wie geschrieben wurde. Das muss dich als C++ programmieren nicht kümmern, weil sich der Compiler darum kümmert. Aber im Prinzip bedeutet das, dass du solange vom Ende des Stacks richtung anfang gehen musst, bis du deine Variable gefunden hast. Das kostet natürlich Zeit. Wohingegen man auch aus der mitte des Heaps lesen kann, ohne vorher durch den gesamten Heap zu gehen.
Stack = dt. Stapel, Heap = dt. Haufen. Und genau so kannst du dir das auch vorstellen. Wenn du den unteren Stein aus einem Stapel haben willst, dann musst du ja erstmal alle anderen Steine, die darüber sind zur Seite legen. Während du bei einem Haufen Steine einfach reingreifst und dir den passenden herausnimmst.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 17 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de