Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

11

04.08.2013, 23:31

In vielen Fällen sind std::unique_ptr oder std::shared_ptr sogar besser als rohe Zeiger. Solltest dich evtl. mal über sie informieren.

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

12

05.08.2013, 01:38

Als kleinen Buchtipp, sofern du es nicht eh schon hast wäre von mir im Zusammenhang mit Speicherverwaltung auf Betriebssystem Ebene:

Moderne Betriebssysteme von Andrew S. Tannenbaum

Sollte man sich aber nur anschaffen wenn in diesem Bereich wirklich Interesse vorliegt.
:love: := Go;

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

13

05.08.2013, 10:15

Was für dich vlt auch sehr interessant sein könnte, ist Garbage Collection. Da geht es zwar hauptsächlich ums Freigeben von Speicher, aber je nachdem wie man sich das ganze ausdenkt, kann man sehr nette (und schnelle) allocatoren bauen.

Java verwendet (u.a) z.B Copy Collection. Das bedeutet, sie Erzeugen die Objekte genau so wie du das machst. Wenn der Speicher dann (fast) voll ist, kommt der Garbage Collector und identifiziert alle "toten" Objekte.
Dann kopiert er einfach alle lebenden Objekte an den Anfang des Speicherbereiches, und kann dann so wie bei deinem Stack-Allocator weiter machen... Dazu kommen noch Generationen etc.

Bei C++ wird dir das ganze natürlich eher weniger bringen, es sei denn du implementierst deine eigene VM.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

05.08.2013, 10:31

Genau dafür gibt es in C++ Smart-Pointer - damit man kein Garbage-Collection bauen muss. :whistling:
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

15

05.08.2013, 10:45

Genau dafür gibt es in C++ Smart-Pointer - damit man kein Garbage-Collection bauen muss. :whistling:

Schon, aber falscher Umgang - z.B. durch Zyklen - und man hat ein Problem. Das passiert mit einem GC nicht so leicht. Aber hat halt alles Vor- und Nachteile, ich persönlich ziehe Ref Counting á la Smart Pointer auch vor.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

05.08.2013, 11:04

Bei Zyklen haben auch Garbage-Collectoren gern mal ein Problem. Ich kenne auch kein gutes Design, wo Element X der Eigentümer von Y ist, Y der von Z und Z der von X. Da ist dann irgendwas anderes schief gelaufen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

17

05.08.2013, 11:15

Bei Zyklen haben auch Garbage-Collectoren gern mal ein Problem. Ich kenne auch kein gutes Design, wo Element X der Eigentümer von Y ist, Y der von Z und Z der von X. Da ist dann irgendwas anderes schief gelaufen.

Naja, gerade am Anfang ist selten gutes Design an der Tagesordnung. Da kann das dann schon mal passieren. Und IMO sollte jeder halbwegs guter GC mit Zyklen klar kommen, sofern er nicht auch per Ref Counting arbeitet.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

18

05.08.2013, 11:57

GCs benutzen eher selten ref counting (jedenfalls wenn sie performant sein wollen, angelscript und lua verwenden z.b. ref counting ;) ), weil es praktisch ein Mittelfinger für den Cache ist und dann noch zyklische referenzen als problem hat. Da wird lieber mit mark-and-sweap (+verbesserungen) und Generationen gearbeitet. Und bei diesen Techniken sind Zyklen kein problem.

PS: Obwohl... ich glaube ich hab mal irgendwo gelesen, dass php bis version 4 oder so keine zyklischen referenzen auflösen konnte... gut aber da ist das auch nicht so schlimm.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

19

05.08.2013, 12:14

GCs benutzen eher selten ref counting (jedenfalls wenn sie performant sein wollen, angelscript und lua verwenden z.b. ref counting ;) ), weil es praktisch ein Mittelfinger für den Cache ist und dann noch zyklische referenzen als problem hat. Da wird lieber mit mark-and-sweap (+verbesserungen) und Generationen gearbeitet. Und bei diesen Techniken sind Zyklen kein problem.

Objective-C arbeitet AFAIK nun auch mit ARC (Automatisches Ref Counting).


PS: Obwohl... ich glaube ich hab mal irgendwo gelesen, dass php bis version 4 oder so keine zyklischen referenzen auflösen konnte... gut aber da ist das auch nicht so schlimm.

Wenn du dazu nochmal etwas findest hätte ich gerne den Link. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

20

05.08.2013, 12:34

Objective-C nutzt semi-automatisches Ref-Counting über Retain() und Release().
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige