Я думаю, что прямое освобождение лучше. Неопределенное поведение - это наихудшая вещь, поэтому, если у вас есть доступ, пока он еще определен в вашем процессе, сделайте это, есть много веских причин, по которым люди приводят это.
Относительно того, где или когда я обнаружил, что в W98 реальный вопрос был «когда» (я не видел пост, подчеркивающий это). Небольшая шаблонная программа (для ввода MIDI SysEx с использованием различных пробелов malloc) освобождает память в бите WM_DESTROY WndProc, но когда я перенес это в более крупную программу, она вылетает при выходе. Я предположил, что это означало, что я пытался освободить то, что ОС уже освободила во время большей очистки. Если я делал это на WM_CLOSE, а затем вызывал DestroyWindow (), все работало нормально, мгновенный чистый выход.
Хотя это не совсем то же самое, что и MIDI-буферы, есть сходство в том, что лучше всего сохранить процесс в целости, полностью очистить, а затем выйти. Со скромными кусками памяти это очень быстро. Я обнаружил, что многие маленькие буферы работали быстрее при работе и очистке, чем меньше больших.
Исключения могут существовать, как кто-то сказал, когда избегают перетаскивать большие куски памяти обратно из файла подкачки на диске, но даже это можно минимизировать, сохраняя больше и меньше выделенных пространств.