Ich denke, direkte Befreiung ist am besten. Undefiniertes Verhalten ist das Schlimmste. Wenn Sie also Zugriff haben, während es noch in Ihrem Prozess definiert ist, gibt es viele gute Gründe, die die Leute dafür angegeben haben.
Wo oder ob ich das in W98 gefunden habe, war die eigentliche Frage 'wann' (ich habe keinen Beitrag gesehen, der dies betont). Ein kleines Vorlagenprogramm (für MIDI-SysEx-Eingaben unter Verwendung verschiedener malloc'd Leerzeichen) würde Speicher im WM_DESTROY-Bit des WndProc freigeben, aber als ich dies in ein größeres Programm transplantierte, stürzte es beim Beenden ab. Ich nahm an, dass dies bedeutete, dass ich versuchte, das freizugeben, was das Betriebssystem bereits während einer größeren Bereinigung freigegeben hatte. Wenn ich es auf WM_CLOSE gemacht habe, dann DestroyWindow () genannt, hat alles gut funktioniert, sofort sauberes Beenden.
Dies ist zwar nicht genau dasselbe wie bei MIDI-Puffern, es besteht jedoch eine Ähnlichkeit darin, dass es am besten ist, den Prozess intakt zu halten, vollständig zu bereinigen und dann zu beenden. Mit bescheidenen Speicherblöcken ist dies sehr schnell. Ich fand heraus, dass viele kleine Puffer im Betrieb und bei der Bereinigung schneller arbeiteten als weniger große.
Es kann Ausnahmen geben, wie jemand sagte, wenn vermieden wird, große Speicherblöcke aus einer Auslagerungsdatei auf der Festplatte zurückzuholen, aber selbst dies kann minimiert werden, indem mehr und kleinere zugewiesene Speicherplätze beibehalten werden.