私はCLRの管理コードとアンマネージコードについて学んでいます。 は、だから私はC#でCスタイルのポインタで、この例を書いた:このコードでは安全でないものは何ですか?
unsafe static void Main(string[] args)
{
int x;
int* y;
y = &x;
*y = 50;
Console.WriteLine(*y);
Console.WriteLine(((int)y).ToString());
}
は、だから私は本当に私は上記のコードから得たILコードに安全ではないかと思っていますか?
.assembly extern mscorlib
{}
.assembly UnsafePointers
{}
.module UnsafePointers.exe
.class private auto ansi beforefieldinit UnsafePointers.Program
extends [mscorlib]System.Object
{
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 34 (0x22)
.locals init (int32 x,
int32* y)
IL_0001: ldloca x
IL_0003: conv.u
IL_0004: stloc y
IL_0005: ldloc y
IL_0006: ldc.i4 50
IL_0008: stind.i4
IL_0009: ldloc y
IL_000a: ldind.i4
IL_000b: call void [mscorlib]System.Console::WriteLine(int32)
IL_0010: nop
IL_0011: ldloca y
IL_0012: conv.i4
IL_0016: call instance string [mscorlib]System.Int32::ToString()
IL_001b: call void [mscorlib]System.Console::WriteLine(string)
IL_0021: ret
}
}
CLRはこのコードを管理しますか?上記のコードで何が問題になることがありますか?
他の人の話に加えて、これはまだ100%マネージドコードです。確かに、メモリが正しいとは限りません.preverifyが教えてくれるツールです。 – John