Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 30.12.2003, 17:14 Titel: new & delete |
|
|
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 |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 30.12.2003, 17:55 Titel: |
|
|
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 |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 30.12.2003, 20:51 Titel: |
|
|
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 _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.12.2003, 20:58 Titel: |
|
|
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 |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 30.12.2003, 21:00 Titel: |
|
|
einzelne variablen mittels new im heap abzulegen ist denke ich keine gute idee da der heap dadurch leicht fragmentiert werden kann. |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 30.12.2003, 21:12 Titel: |
|
|
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 |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 30.12.2003, 22:10 Titel: |
|
|
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 |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 31.12.2003, 10:22 Titel: |
|
|
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 |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 31.12.2003, 17:28 Titel: |
|
|
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 |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 01.01.2004, 12:41 Titel: Re: new & delete |
|
|
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 |
|
|
|