Myślę, że bezpośrednie uwalnianie jest najlepsze. Niezdefiniowane zachowanie jest najgorszą rzeczą, więc jeśli masz dostęp, gdy jest jeszcze zdefiniowany w twoim procesie, zrób to, istnieje wiele dobrych powodów, dla których ludzie podali to.
Co do tego, gdzie lub czy znalazłem to w W98, prawdziwe pytanie brzmiało „kiedy” (nie widziałem postu podkreślającego to). Mały program szablonowy (dla wejścia MIDI SysEx, wykorzystujący różne spacje malloc'd) zwolniłby pamięć w bicie WM_DESTROY WndProc, ale kiedy przeszczepiłem to do większego programu, zawiesił się przy wyjściu. Założyłem, że oznacza to, że próbuję uwolnić to, co system operacyjny już zwolnił podczas większego czyszczenia. Jeśli zrobiłem to na WM_CLOSE, a następnie wywołałem DestroyWindow (), wszystko działało dobrze, natychmiastowe czyste wyjście.
Chociaż nie jest to dokładnie to samo, co bufory MIDI, istnieje podobieństwo w tym, że najlepiej jest zachować proces w nienaruszonym stanie, całkowicie wyczyścić, a następnie zakończyć. Przy niewielkich fragmentach pamięci jest to bardzo szybkie. Okazało się, że wiele małych buforów działa szybciej w działaniu i czyszczeniu niż mniej dużych.
Mogą istnieć wyjątki, jak ktoś powiedział, unikając przenoszenia dużych fragmentów pamięci z powrotem z pliku wymiany na dysku, ale nawet to można zminimalizować, utrzymując więcej i mniej przydzielonych przestrzeni.