1
ネイティブポインタがマネージヒープを指すことができる方法があるのだろうか?ヒープコンパクションとGCサイクルがオブジェクトアドレスを変更することを考えると、これは危険なことだと私は知っていますが、それでも可能ですか?例が分かるだろう。C++ CLIのネイティブポインタとハンドルポインタ
また、ハンドル(^)がネイティブヒープをまったく指すことができないのは本当ですか?
ありがとうございました。
ネイティブポインタがマネージヒープを指すことができる方法があるのだろうか?ヒープコンパクションとGCサイクルがオブジェクトアドレスを変更することを考えると、これは危険なことだと私は知っていますが、それでも可能ですか?例が分かるだろう。C++ CLIのネイティブポインタとハンドルポインタ
また、ハンドル(^)がネイティブヒープをまったく指すことができないのは本当ですか?
ありがとうございました。
はい、これはサポートされていますが、指し示すオブジェクトはピンで固定されている必要があります。 .NETのGCHandle :: Alloc()を使用するか、C++/CLI pin_ptr<>
クラスを使用します。オブジェクトを長い間固定するのは悪いです。道路の岩の周りを動かす必要があるため、ガベージコレクタには苦労します。ネイティブコードを呼び出すときは、固定が非常に一般的です。
ネイティブヒープ内のブロックに対する追跡参照(ハット)は意味をなさないので、ガベージコレクションヒープ内のオブジェクトのみを追跡します。
あなたがしようとしていることは正確にはわかりませんが、私のすべてのアプリケーションでは、このようなことをすることは不必要であることがわかりました。マネージドクラス内のアンマネージヒープへのポインタと、アンマネージクラス内のマネージヒープへのハンドルを持つすべての問題を解決できました。 – Ian