JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=7baf57782304339d2adfc3b1b38aeda4Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

new & delete

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 30.12.2003, 17:14    Titel: new & delete Antworten mit Zitat

hi,
ich hab ma ne Frage zu new und delete und zwar ist es nicht
sinvoll alle Vars mit new zu erzeugen so kann man jederzeit
im Programm, wenn eine Var nicht mehr benötigt wird, wieder
mit delete den Speicher dieser freigeben ?
_________________
"Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."

"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."

"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 30.12.2003, 17:55    Titel: Antworten mit Zitat

Wenn du eien Variable nicht mit new erzeugst, dann ist sie auch nur so lange gültig und belegt speicher, wie sie benutzt werden kann.

Code:

int x;

void main()
{
 x = 0;
 if( x == 0 )
 {
    int y = 1;
    cout << y;
 }
  cout << "ende\n";
}

Sinn macht dieser code nicht viel aber:
die Variable y wird sofort, dachdem die If bedingung vorbei ist automatisch "gelöscht", da sie ja auch nicht mehr verwendet werden kann.

Natürlich kann man den speicher mit delete eher und individueller freigeben, aber wen interessiert es nun, ob ein paar bytes eine 10tel sekunde früher oder später freigegeben werden Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 30.12.2003, 20:51    Titel: Antworten mit Zitat

nach dem Standard schon den Visual C++ befolgt, doch andere Compiler behalten diese Variable doch bis zum Programmende.

zur Anfangsfrage aber:
wenn du nicht gerade >>100 Variablen hast die du nur ganz kurz brauchst, würde ich mir darüber keine Gedanken machen.

Der Speicherverbrauch davon ist einfach heutzutage so gering, dass es keinen merkbaren Unterschied gibt, ob du sie gleich wieder freigibst oder wartest bis das das Programmende erledigt Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.12.2003, 20:58    Titel: Antworten mit Zitat

Wenn du es unbedingt auch bei Compilern so haben möchtest die das nicht Auotomatisch ändern dann musst du das so verwenden:

auto <Variablentyp> <VariablenName>

@TheMillenium:

So ungefährlich ist das Aufbewahren nicht benötigter Variablen auch nicht. (Es sei denn sie wurden nicht mit new oder ähnlichem erstellt).

Der Speichewr ist ziemlich schnell mit Kram vollgeballert und dann kommen ziemlich üble Probleme auf.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 30.12.2003, 21:00    Titel: Antworten mit Zitat

einzelne variablen mittels new im heap abzulegen ist denke ich keine gute idee da der heap dadurch leicht fragmentiert werden kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.12.2003, 21:12    Titel: Antworten mit Zitat

Mit malloc wird das ganze ja auch in den Heap gelegt. Was würdest denn du empfehlen ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 30.12.2003, 22:10    Titel: Antworten mit Zitat

Einige Variablen so zu definieren damit man sie öfters verwenden kann und nicht immer dafür neue erstellen und wieder entfernen muss?
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 31.12.2003, 10:22    Titel: Antworten mit Zitat

So sollte man auch in Schleifen nicht so viele lokale variablen benutzen:

Code:

for( int i=0; i<256; i++ )
{
 int x = i*i;
 cout << x;
}


Performance technisch wäre es besser, wenn man das so schreibt:

Code:

int x;
for( int i=0; i<256; i++ )
{
 x = i*i;
 cout << x;
}


So wird nur eine Variable erstellt, und nicht wie im ersten Beispiel für jeden schleifendurchlauf eine Variable erstellt und wieder zerstört.[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 31.12.2003, 17:28    Titel: Antworten mit Zitat

Variablen die nur temporär benutz werden, einfach ganz normal dh auf dem stack anlegen:
Code:

int x;
// wir auf dem stack angelegt und am funktionsende wieder freigegeben


Große Datenmengen auf dem Heap anlegen:
Code:

data *pData = new data[50000];


die kleinen variablen wie int usw können auf dem stack effizienter verwaltet werden als auf dem Heap. Auf dem Heap könnten, da die Variablen nur wenig Platz benötigen, leicht "Löcher" enstehen(fragmentiert) in die keine großen Datenblöcke/Variablen hineinpassen.

malloc und new machen ja im prinzip das selbe.
sie reservieren speicher auf dem Heap.

man kann natürlich viele kleine variablen zu einem großen datenblock zusammenfassen (klasse,struktur,array) und diesen auf dem heap ablegen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 01.01.2004, 12:41    Titel: Re: new & delete Antworten mit Zitat

DarK hat Folgendes geschrieben:
hi,
ich hab ma ne Frage zu new und delete und zwar ist es nicht
sinvoll alle Vars mit new zu erzeugen so kann man jederzeit
im Programm, wenn eine Var nicht mehr benötigt wird, wieder
mit delete den Speicher dieser freigeben ?


Warum willst du dir mehr arbeit machen? Außerdem kosten new und delete auch Zeit. In größeren Projekten ist es deshalb sinnvoll Speicher in großen Blöcken zu reservieren und dann einzeln auszugeben(Memory Manager).
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum