4
.NET에서 두 가지 다른 방법으로 메모리를 고정시키는 이유는 무엇입니까? 그들 사이의 차이점은 무엇입니까?고정 및 안전하지 않음의 차이점
.NET에서 두 가지 다른 방법으로 메모리를 고정시키는 이유는 무엇입니까? 그들 사이의 차이점은 무엇입니까?고정 및 안전하지 않음의 차이점
고정 문은 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
사실이지만 메서드, 형식 또는 코드 블록과 같은 컨텍스트를 유추 할 수 없다고 생각합니다. 그러나 이것은 단지 추측 일뿐입니다. – cgreeno
컴파일러는 고정 된 명령문을 안전하지 않은 명령문으로 자동 줄 바꿈 할 수 있습니다. 어쩌면 안전하지 않은 코드의 두포 아래에 다른 작업이있을 수 있습니다.이 작업은 천천히 실행되는 일반 '안전'코드를 만들 수 있습니다. – arul