ref byte
誰かがに変換した経験がありbyte[]
ますか?
関数が次のような引数を取る場合
void foo(ref byte buffer);
foo
その後、を使用して呼び出すことが可能です
void call_func()
{
byte arr[] = new byte[10];
foo(ref arr[0]);
}
buffer
問題は、引数をbyte[]
で配列に再変換する方法foo
です。
あなたはそうしない。
配列全体の固定を回避するために、ランタイムは選択した単一の要素のコピーを作成する場合があります(その後、呼び出し後にコピーし直します)。その場合、関数は一時コピーのアドレスを取得します。これは、他の配列要素のアドレスとは関係ありません。(まあ、いくつかのエイリアシングの考慮事項があるかもしれません、この最適化は、エイリアシング分析がより実行可能であるピンボークおよび/またはリモートコールに対してはるかに可能性が高いです)
配列が必要な場合は、配列を渡します。
正しく機能しない可能性があることを気にしない場合は、安全でないコードを使用して他の要素にアクセスできます。
pinned( byte* p = &buffer ) {
buffer[4] = 0;
}