LocalAlloc
HeapAlloc
この場合も同じです。これは常にそうであったわけではありませんが、少なくとも 10 年間はそうでした。紛らわしいのは承知していますが、これはすべて、従来の 16 ビット システムと下位互換性の結果です。このドキュメントを参照してください:
Windows のメモリ管理では、16 ビット > Windows のように、個別のローカル ヒープとグローバル ヒープは提供されません。結果として、関数のグローバル ファミリとローカル ファミリは同等であり、どちらを選択するかは個人的な好みの問題です。
このドキュメントも参照してください:
プライベート ヒープから割り当てられたメモリと、他のメモリ割り当て関数を使用して割り当てられたメモリに違いはありません。関数の完全なリストについては、メモリ管理関数の表を参照してください。
違いがありますので、常にメモリ機能のドキュメントをお読みください。たとえば、CoTaskMemFree
NULL を処理しますが、処理HeapFree
しません。さまざまな割り当て関数により、メモリの割り当て方法と OS オブジェクト (プロセスなど) 間での共有方法をさまざまなレベルで制御できます。ただし、プロセスに単純な古いメモリが必要な場合は、使用している API のドキュメントを常に確認してください。特定の割り当て関数または解放関数を使用する必要があると指定されている場合がありますが、それ以外の場合は、1 つを選択して一貫性を保つようにしてください。
ドキュメントがそれを切り替える理由は何ですか?私の推測では、時間の経過とともに複数の人物によってハッキングされたものであり、その中には実際の OS チームのメンバーはいませんでした。MSDN サンプル コードは悪名高いです。フラグを立てるか、MSDN ページにフィードバックを残す方法があるはずです。