Je pense que la libération directe est la meilleure. Un comportement non défini est la pire des choses, donc si vous avez accès pendant qu'il est encore défini dans votre processus, faites-le, il y a beaucoup de bonnes raisons que les gens ont données pour cela.
Quant à savoir où, ou si, j'ai trouvé cela dans W98, la vraie question était «quand» (je n'ai pas vu un article insistant sur cela). Un petit programme de modèle (pour l'entrée MIDI SysEx, utilisant divers espaces malloc'd) libérerait de la mémoire dans le bit WM_DESTROY du WndProc, mais quand je l'ai transplanté dans un programme plus grand, il s'est écrasé à la sortie. J'ai supposé que cela signifiait que j'essayais de libérer ce que le système d'exploitation avait déjà libéré lors d'un nettoyage plus important. Si je l'ai fait sur WM_CLOSE, puis appelé DestroyWindow (), tout a bien fonctionné, sortie propre instantanée.
Bien que ce ne soit pas exactement la même chose que les tampons MIDI, il existe une similitude en ce sens qu'il est préférable de garder le processus intact, de nettoyer complètement, puis de quitter. Avec des morceaux de mémoire modestes, c'est très rapide. J'ai trouvé que de nombreux petits tampons fonctionnaient plus rapidement en fonctionnement et en nettoyage que moins de grands tampons.
Des exceptions peuvent exister, comme quelqu'un l'a dit en évitant de retirer de gros morceaux de mémoire d'un fichier d'échange sur disque, mais même cela peut être minimisé en gardant des espaces alloués plus nombreux et plus petits.