ジェフリー・リッチターとクリストフ・ナサールの著書 『Windows via C-C ++』で以下のメモに出くわしました。
次のコードを調べます:V
OID EXEFunc() {
PVOID pv = DLLFunc();
// Access the storage pointed to by pv...
// Assumes that pv is in EXE's C/C++ run-time heap
free(pv);
}
PVOID DLLFunc() {
// Allocate block from DLL's C/C++ run-time heap
return(malloc(100));
}
それで、あなたはどう思いますか?上記のコードは正しく機能しますか?DLLの機能によって割り当てられたブロックは、EXEの機能によって解放されますか?答えは:多分。示されているコードは、十分な情報を提供していません。EXEとDLLの両方がDLLC/ C ++ランタイムライブラリにリンクしている場合、コードは正常に機能します。ただし、一方または両方のモジュールが静的C / C ++ランタイムライブラリにリンクしている場合、freeの呼び出しは失敗します。
モジュールを静的Cランタイムにリンクするときに、ここでfreeの呼び出しが失敗する理由を理解できません。
誰かが無料が失敗する理由を説明できますか?ここで同様の質問が見つかりました: Cランタイムの静的リンクと動的リンクでのメモリ割り当て
しかし、ここではMrPhilTxと同じ疑問があります。すべてのヒープが同じアドレス空間にあるのではないでしょうか。
ありがとう!