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

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

1

25.08.2011, 14:52

Wie sauber ist der Speicher vom Arbeitsspeicher

Hallo Leute!

Soll ich im Konstruktor meiner Engine bei jeder Klasse eigentlich ein ZeroMemory(this,sizeof(ENGINE_CLA....)); einbauen oder nicht?
Ich hab Bedenken dass da was schiefgeht und irgendwie was falsches überschrieben bzw. mit Nullen gefüllt wird.

Und warum macht man bei einem D3DPRESENT_PARAMETERS d3dpp immer ZeromMemory??
Der Speicher im Arbeitsspeicher ist doch "sauber" oder nicht?

Mit freundlichen Grüßen Johannes Schneider
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

25.08.2011, 14:55

Naja der Begriff "Sauber" ist hier etwas verwirrend. an dem speicher können werte von alten dingen stehen, aber das sollte dich nur dann stören, wenn du diesen speicher nicht initialisiert. speziell auf D3DPRESENT_PARAMETERS bezogen heisst das: fülle alle Felder der struct mit sinnvollen werten oder rufe ZeroMemory auf. wobei mit ZeroMemory ist auch nicht immer sicher, weil für bestimmte felder null ungültig sein kann.
also wenn du zeromemory ausführst und danach alle felder von D3DPRESENT_PARAMETERS füllst, ist das ZeroMemory unnötig.

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

3

25.08.2011, 15:04

Es gab da doch eine safe-Version von ZeroMemory... wie sprintf_s.. aber ich weiss den Namen nicht mehr

ZeroMemoryS oder so.. Was hälst du davon?
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

Mastermind

unregistriert

4

25.08.2011, 15:11

Zitat

ZeroMemory(this,


Um Himmels Willen, lass den Scheiß bloß sein.

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

5

25.08.2011, 15:18

Zitat

Um Himmels Willen, lass den Scheiß bloß sein.
:D dacht ich mir schon
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

  • »Johannes Schneider« ist der Autor dieses Themas

Beiträge: 103

Beruf: Chemiestudent

  • Private Nachricht senden

6

25.08.2011, 16:10

Vielen dank an euch alle :)
"Das Glück des Forschers besteht nicht darin, die Wahrheit zu besitzen, sondern eine Wahrheit zu erringen. Und in diesem fortschreitendem, erfolgreichen Suchen nach der Wahrheit - darin liegt die
eigentliche Befriedigung." Max Planck

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

7

25.08.2011, 21:36

Wenn man aber gerne dazu neigt Strukturen wie die bereits genannte nur zum Teil mit richtigen Werten zu füllen, hat man mit einem ZeroMemory davor immerhin ein reproduzierbares Problem, wenn man eins haben sollte. ;)
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

idontknow

unregistriert

8

25.08.2011, 21:44

Zitat

Um Himmels Willen, lass den Scheiß bloß sein.
:D dacht ich mir schon

Du hast aber ziemlich sicher nicht verstanden warum er das gesagt hat.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

25.08.2011, 23:40

Soll ich im Konstruktor meiner Engine bei jeder Klasse eigentlich ein ZeroMemory(this,sizeof(ENGINE_CLA....)); einbauen oder nicht?

Auf keinen Fall, das ist generell einfach nur falsch, funktioniert nur in ganz speziellen Ausnahmefällen. Spätestens bei einer Klasse die virtuelle Methoden hat, wird das ganz bös' in die Hose gehen. (Believe me, I learned the hard way ;). Der Grund dafür ist, dass eine solche Klasse verstecke Membervariablen enthält, Stichwort Virtual Function Table wenns interessiert. Und rein prinzipiell ist das genaue Layout eines Objektes im Speicher im Allgemeinen nicht definiert.)

Und warum macht man bei einem D3DPRESENT_PARAMETERS d3dpp immer ZeromMemory??

D3DPRESENT_PARAMETERS ist ein sog. PoD (Plain old Datatype, prinzipiell eine Klasse die nur primitive Datentypen als Member und nur einen trivialen Copy-Constructor, Assignment-Operator und Destruktor hat), also genau ein solcher Ausnahmefall. Ich initialisiere solche Strukturen wie D3DPRESENT_PARAMETERS allerdings nie mit ZeroMemory() sondern immer alle Member explizit, auch wenn es nur ein = 0 ist. Dann ist immer sofort klar was welche Werte bekommt und man kann nie was übersehen. Außerdem: Warum sollte ich zuerst alles mit 0en füllen, wenn ich Teile davon nacher gleich wieder mit was anderem überschreibe!?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (25.08.2011, 23:49)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

10

26.08.2011, 00:09

Und rein prinzipiell ist das genaue Layout eines Objektes im Speicher im Allgemeinen nicht definiert.
Und ich dachte in C/C++ ist es ziemlich genau definiert.

Werbeanzeige