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