4
.NETには2つの異なる方法でロックメモリが存在するのはなぜですか?それらの違いは何ですか?固定と非安全の違い
.NETには2つの異なる方法でロックメモリが存在するのはなぜですか?それらの違いは何ですか?固定と非安全の違い
固定文は、unsafe modifierのコンテキストで使用されます。 Unsafeは、通常のC#演算の外にあるポインタ演算(たとえば、低レベルAPI呼び出し)を使用すると宣言します。 fixedステートメントは、メモリをロックするために使用されるため、ガベージコレクタはまだ使用中にメモリを再割り当てしません。あなたは、安全でないという文脈の外では固定ステートメントを使うことはできません。それは、固定の文を見たとき、コンパイラはそれを知っている必要があり、コードブロック/メソッドが安全であることを指定するには、明示的な必要がありますなぜ
例
public static void PointyMethod(char[] array)
{
unsafe
{
fixed (char *p = array)
{
for (int i=0; i<array.Length; i++)
{
System.Console.Write(*(p+i));
}
}
}
}
は私が思ってしまいます。 – arul
trueですが、コンテキスト、つまりメソッド、型、コードブロックを推論することはできません。しかし、それはちょうど推測です。 – cgreeno
コンパイラは、fixedステートメントをunsafeステートメントで自動的にラップできます(値が任意の場合)。たぶん、安全でないコードのいくつかの他の操作があります。これは、一般的な「安全な」コードをゆっくりと実行させるかもしれません。 – arul