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

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

1

20.06.2014, 15:42

Fragen zu ZeroMemory

Hallo.


Ich habe mal eine kurze frage zum Makro "ZeroMemory". im Internet steht, das die Funktion einen Speicherbereich auf 0 setzt.
Jedoch möchte ich wisse, ob der Speicherbereich auch damit freigegeben wird?

Ich habe in meinem Programm ein paar Speicherbereiche, die ziemlich groß sind. Ich will sichergehen, dass die Bereichen nach Programmende auch frei sind.

Falz nicht: welche Alternative gibt es?

Danke im voraus

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

20.06.2014, 16:04

Nein, wird er nicht.

Es ist nichts anderes als ein memset((Destination),0,(Length))
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

3

20.06.2014, 16:09

OK. Wie kann man einen Bereich freigeben?

zufällig mit free()?

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

4

20.06.2014, 16:16

Das hängt davon ab wie du den Speicher allokiert hast...
new -> delete
std::malloc, std::calloc, std::realloc -> std::free
VirtualAlloc -> VirtualFree
HeapAlloc -> HeapFree
...

JustSid

Frischling

Beiträge: 54

Beruf: Lead Idiot

  • Private Nachricht senden

5

20.06.2014, 16:18

Das OS räumt die Speicherseiten schneller auf als du mit free/delete hinkriegst. Leaken von application lifetime memory Blöcken, solange sie keine sensitiven Informationen enthalten, ist absolut okay. Sensitive Sachen mit eben dingen wie SecureZeroMemory() ausleeren.
Jabberwock is killing user

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

6

20.06.2014, 16:26

Ok Danke.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

7

20.06.2014, 16:30

Zitat

Das OS räumt die Speicherseiten schneller auf als du mit free/delete hinkriegst.

Aber eben nur beim Beenden. Außerdem ist es kein guter Stil. Damit hast du ein Speicherleck.

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

8

20.06.2014, 16:56

Das meint er nicht. Er meint, dass du mit free()/delete einen Memorybereich zwar wieder für andere Anwendungen freigibst, deine Daten aber noch drinstehen. Bei sensitiven Daten sollte man den Speicher deswegen vorher mit Ramsch-/Nullbytes füllen.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

JustSid

Frischling

Beiträge: 54

Beruf: Lead Idiot

  • Private Nachricht senden

9

20.06.2014, 18:03

Ich fasse

Zitat

Ich will sichergehen, dass die Bereichen nach Programmende auch frei sind.

So auf als das er leaks vermeiden möchte, nicht das sie sicher überschrieben sind.

Beim beenden muss man Speicher nicht freigeben, Stil hin oder her, Tatsache ist das es das beenden nur langsamer macht wenn man ne Menge Speicher haarklein hinter sich aufräumt. Siehe Firefox. Das OS ist einfach schneller darin die Speicherseiten wieder rauszuwerfen und es nicht bad practice Speicher der sowieso die ganze Applikation über lebt einfach nicht frei zu geben.

Wenn er sicher gehen will das der Speicher mit 0 voll ist beim beenden, SecureZeroMemory(), da ZeroMemory() vom compiler weg optimiert werden kann (genauso wie die eigene for Schleife die alles mit 0en befüllt)
Jabberwock is killing user

  • »Sebastian Müller« ist der Autor dieses Themas

Beiträge: 369

Wohnort: Freilingen [Rheinland-Pfalz]

Beruf: Schüler

  • Private Nachricht senden

10

21.06.2014, 00:26

OK. Danke für die Antworten.

Ich meinte mit verhindern natürlich Speicherlecks.

Gilt das nur für RAM, oder auch für GPU-Memorie. (bsw. Vertexbuffer)

Naja. wie auch immer.

Werbeanzeige