2016-03-25 14 views
0

Ich versuche, ein Assembly-Programm mit MASM zu schreiben. Ich verwende GetProcessHeap, um den Heapspeicher abzurufen, und HeapAlloc und HeapFree, um Heapspeicherabschnitte zuzuweisen und freizugeben. Ich frage mich, was mit Speicherorten passiert, wenn sie freigegeben werden, vorausgesetzt, der Speicherort wurde nicht erneut HeapAlloc'd? Behalten sie ihre alten Werte bei, oder werden sie ohne mein Wissen überschrieben?Was passiert mit dem Speicher nach der Freigabe?

Kann ich auch auf die freigegebenen Speicherplätze zugreifen?

+3

Wie [msdn sagt] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa366701.aspx): "Sie sollten in keiner Weise auf Speicher verweisen, der von HeapFree freigegeben wurde . " Wenn Sie das tun, sind alle Wetten aus. – Jester

+0

Ich kann mir nicht vorstellen, dass sie die Bandbreite verbrennen würden, um diesen Speicher zu löschen oder zu ändern, wenn er freigegeben wird. Aber das bedeutet immer noch nicht, dass du dich damit anlegen solltest ... wie bereits gesagt, sind alle Wetten aus ... –

Antwort

2

Wie von Jester erwähnt, ist es nicht sicher, auf den Speicher zuzugreifen, nachdem er freigegeben wurde. Alles könnte dieser Erinnerung passieren. Insbesondere kann der Heap-Manager ihn für seine eigenen Zwecke verwenden oder er kann die Seiten freigeben, um den Speicher an das Betriebssystem zurückzugeben. Wenn Sie später versuchen, auf diesen Speicher zuzugreifen, stürzt Ihr Programm ab. Da es sich um den Standardheap handelt, ist es auch möglich, dass Windows- oder DLLs von Drittanbietern diesen Speicher möglicherweise asynchron von einem Thread zuweisen, den Sie nicht erstellt haben.