.
|
|
| Autor | Beitrag |
|---|---|
|
075 14.12.2002, 20:10 gerk |
Ich habe bis vor gestern Abend gedacht, dass wenn man Speicher mit new alloziert, und ihn nicht mit delete frei gibt, er verloren (auch nach beenden des programmes) bleibt. Darum habe ich immer _peinlichst_ genau darauf geachtet, new-speicher asap frei zu geben. Mein Weltbild ist erschüttert. Naja egal, meine neue Frage lautet: Greets, „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
076 15.12.2002, 00:15 Tron |
wieso ist es das? bei win 95/98 ist der speicher, wenn man ihn nicht wieder freigibt futsch. kod hat einfach noch einige leaks durch logikfehler in seinem programm. --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
077 15.12.2002, 12:02 gerk |
1) Nur so 2) Was ist kod? Da, meine Antwort auf deinen Post nur 25 Zeichen betragen würde, schreibe ich diese Zeile dazu, damit's nach mehr aussieht :) --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
078 15.12.2002, 14:09 Tron |
King of Darkness --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
079 15.12.2002, 15:29 gerk |
Rotfl, Ich dachte das sei ein Programm. Wär irgendwie unlogisch :) --„Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
080 15.12.2002, 16:00 CN |
ich dachte du meinst "kot" o_O |
|
Profil || Suche |
|
081 16.12.2002, 07:48 King of Darkness |
MHHH, beschmutz meinen namen nicht !!! zum thema, logikfehler kann ich nicht erkennen, wenn ich aber bei mir (win2k) beim taskmanager den karteireiter prozesse anklicke dann schwankt da der speich beim "freigeben" so langsam nach unten wobei was ich auch nicht verstehe: bei 770000 objekt ja ihr habt richtig gelesen 770000, braucht das ding so ca 500 bis 600 mb (jedenflas zeigt das der taskmanager im bereich systemleisung an) ich flehe euch an bitte helft mir, ich bin am verzweifeln den atuellen code sollte ich irgendwo mal hochladen, oder wer will dem sende ich es per mail --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
082 16.12.2002, 15:07 apfelkorn |
mh... klar, win95 und 98 und me sind zwar offiziell protected-mode-betriebssysteme, aber das war dann wohl nur halb durchdacht, aber ansich sollte jedes betriebssystem, das einen prozess killt auch in der lage sein den allozierten speicher wieder freizugeben (es gibt auch die möglichkeit einen pointerfriedhof zu basteln, in dem alle allozierten speicheradressen dann zwischengespeichert werden bis zum beenden des programms) -- |
|
Profil || Suche |
|
083 16.12.2002, 15:18 Kriz |
Tja, sowas machen ja Garbage Collectors. Die sammeln erstmal alles Alloziierte an und prüfen dann mehr oder weniger regelmäßig, ob das Objekt noch gebraucht wird. Ansonsten wird es dann weggekickt. Aber diese GCs sind mir irgendwie zu uberevil, da es einige Sachen gibt, die ... äh.. uberevil sind: 1. Man weiß nie, wann der Sack anfängt mal wieder seinen Heap auszumisten Nee nee, GC's sind nicht sehr doll (siehe Java, SmallTalk usw.) --K:R-I)Z++ |
|
Profil || Suche |
|
084 16.12.2002, 19:47 Tron |
aber hallo! erzeuge eine instanz von objektliste: und fuehre damit gleich die methode SetToBegin aus: und schon ist das objekt, auf das pObjekt nach der konstruktion geziegt hat, verwaist. den konstruktor verstehe ich sowieso nicht: warum macht er das, was er macht? --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
085 17.12.2002, 09:31 King of Darkness |
ja gut das habe ich aber schon beseitigt, der code is nich mehr ganz aktuell ;) --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
086 03.01.2003, 13:44 King of Darkness |
ok problem gelöst mit der liste, ich habe die liste einfach nur falsch zusammen gebaut (scheint mir so) aber nun mal ne andere frage wenn sollte man ne referenz einsetzen und wann nen zeiger ? --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
087 03.01.2003, 19:04 gerk |
Referenzen dürfen nicht Null sein und können nicht erneut zugewiesen werden. Zeiger sind dafür aber "gefährlicher" aber auch flexibler, meint eines der schlauen Bücher. Grüße, Edit: Zum Thema Nullreferenzen: „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ Dieser Beitrag wurde am 03.01.2003 um 19:11 von Zgerk bearbeitet. |
|
Profil || Suche |
|
088 04.01.2003, 14:54 King of Darkness |
danke, und was bringt mehr performence, zeiger oder ? --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
089 04.01.2003, 14:55 Prefect |
:P cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
090 04.01.2003, 15:48 gerk |
Warum werden beim Operator-Overloading manche Operanden (ist doch die Mehrzahl, oder?) als eigene Funktionen und dann als friend der entsprechenden Klasse und manche als Klassenmethoden implementiert? Die "friend"-Versionen hab ich vorwiegend bei Rechenoperatoren gesehen. Grüße, „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ |
|
Profil || Suche |
|
091 04.01.2003, 18:50 King of Darkness |
waru das friend ist weis ich nicht aber das mit dem operator-overloading glaube ich zu wissen das diehn dazu um zb verktoren zu addieren oder andere dinge die man nicht "normal" addieren(oder was auch immer) will Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
092 04.01.2003, 21:39 Prefect |
Es heißt Operatoren. Operanden sind die Dinger, an denen vom Operator rumopereriert wird. Ich weiß ehrlich gesagt gar nicht ob es von der Syntax her irgendwelche Beschränkungen gibt, aber es macht durchaus von der Konvention her Sinn. Vergleiche zum Beispiel mal operator+= und operator+. Der operator= kommt bei einem Codeschnippsel wie a += b zum Einsatz. Dabei wird das Objekt a modifiziert, es ist fast so, als würde eine Funktion von a aufgerufen werden. Der Operator "gehört" also zum Objekt a und wird dementsprechend als Memberfunktion implementiert. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
093 04.01.2003, 21:59 Tron |
es macht genau keinen unterschied ob man ist eine frage des stils und geschmacks, wie prefect schon angedeutet hat, bietet es sich an +=, -=, ... als methoden zu implementieren, das das 'passender' erscheint. einzige ausnahme waere zu friend: 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
094 21.01.2003, 18:50 Gnomo |
Mal ´ne andere Frage. Was ist "richtiger" C++ Stil? Es wird zwar viel darüber geredet, aber niemand weiß wirklich eine Antwort. -- |
|
Profil || Suche |
|
095 22.01.2003, 11:07 Kriz |
Dafür gibt es keine Antwort, Gnomo, wie der Stil auszusehen hat. Man kann alles ineinanderfummeln zu einem Klops oder es fein säuberlich aufreihen und trennen. Das ist halt der "Nachteil" formatfreier Sprachen =) Allerdings gibt es syntaktische Stile, die nicht nur "professioneller" aussehen (was auch immer man darunter verstehen mag), sondern ab und an auch die Performance eines Programms deutlich beschleunigen können. Ich rede hierbei nicht von optimierten Datenstrukturen oder Algorithmen, sondern von optimiertem Einsatz von C++ Sprachelementen! Beispiel Stringkopieren (gilt btw. auch für C): Der normale Coder würde eine for-Schleife verwenden, um zeichenweise einen String in einen anderen zu kopieren. Als Restriktion dient dabei die Länge des Quellstrings (ohne '\0' als Terminator). Das ist aber irgendwie laienhaft. Wenn man gewisse Basisdinge weiß, dann kann man das Stringkopieren erheblich vereinfachen und beschleunigen. Ich führe das hier mal etwas ausführlicher aus, damit man auch versteht, was Sache ist. Zuerst muß man sich erstmal klarmachen, was ein "String" in C/C++ ist. Ein String ist... a) kein Array von Zeichen, sondern ein Zeiger auf das erste Zeichen Wenn man diese drei Punkte begriffen hat, kann man nun effektiv das Kopieren eines Strings über die Zeigerarithmetik in Angriff nehmen. Dazu benötigt man... a) einen Quellstring Jetzt muß man wieder etwas nachdenken. Der Quellstring (qs) sollte eigentlich nicht verändert werden durch das Kopieren, weshalb man ihn als konstant betrachten muß. Dagegen muß der Zielstring (zs) nichtkonstant sein, denn er wird ja verändert. Darüberhinaus muß zs mindestens die gleiche Menge Zeichen aufnehmen können wie qs Zeichen besitzt: L() = Stringlänge inkl. '\0' L(zs) >= L(qs) Kommen wir zur der Implementierung. Meistens erfüllen Funktionen/Methoden die Aufgabe des Stringkopierens. Man muß qs und zs daher als Argumente an die Parameterliste einer Kopierfunktion übergeben. Hierbei darf man nicht vergessen, daß es bei der Übergabe von Strings an Funktionen/Methoden eine Einschränkung gibt! Aufgrund der Tatsache, daß ein Zeiger auf 32 Bit Plattformen stets auch als 32 Bit Adresse an die Funktion/Methode übergeben wird, kann man nicht mehr auf die Länge des Strings zurückgreifen. Diese Information geht definitiv verloren in der Parameterliste! Das ist btw. auch der Grund, wieso bei der Übergabe von Arrays auch immer die Größe des Arrays mitübergeben wird. Die einzige Information, die man über die Länge eines Strings erfahren kann, ist die Indexposition des Terminators ('\0') + 1. Das gilt allerdings nur für qs. zs dagegen ist in der Regel "leer" ohne Terminator. Zudem ist die Länge von zs nirgends definiert! zs ist nur ein Zeiger auf char, mehr nicht. Das ist aber für das Stringkopieren ein Ding der Unmöglichkeit. Daher muß vorher garantiert werden, daß zs weder NULL ist oder die obige Restriktion nicht erfüllt! Das erreicht man nur, wenn zs als char-Array mit entsprechender Anzahl von Feldern existiert oder als dynamisch erzeugter String mit entsprechender Länge (inkl. dem Terminatorzeichen!). Also muß zs char[] sein oder char* mit entsprechenden, alloziierten Speicher. Das Kopieren erfolgt wie gesagt am effektivsten über Zeigerarithmetik. Da man einen Zeiger dereferenzieren kann mit dem *-Operator und einen Zeiger mit ++ auch imkrementieren kann, kann man diese beiden Operatoren perfekt zusammenführen für das Stringkopieren. Der Code lautet simplerweise:
Erst wenn *qs den Terminator liefert und diesen *zs zugewiesen hat, bricht while() ab, da while() false wird. In diesem Fall ist der komplette String kopiert worden mit praktisch fundamentalen Sprachmitteln. Und inkl. dem Terminator... Als Funktion wäre das:
K:R-I)Z++ |
|
Profil || Suche |
|

