Favicon

Unsafe modifier

Peponi11/11/20242m

C#
SyntaxKeywordModifier

1. Introduction

unsafe 한정자는 안전하지 않은 컨텍스트를 나타낸다. 일반적인 C# 코드는 CLR에서 확인이 가능하고 관리되는 객체를 뜻하는 데 반해 unsafe 한정자를 적용하는 경우 안전하지 않은 컨텍스트로 간주된다. 따라서 코드 무결성은 작성자에 의해 확인되어야 한다.

unsafe 한정자를 사용하면 다음과 같은 기능을 사용할 수 있다.

  • 포인터
  • 고정 크기 버퍼
  • 함수 포인터
    \vdots

unsafe 한정자가 사용되는 코드를 컴파일 하는 경우 컴파일러 옵션 AllowUnsafeBlockstrue로 설정해주어야 한다.

2. Example

static unsafe int Sum(int* value1, int* value2) => *value1 + *value2;
 
int[] a = new int[3] { 1, 5, 10 };
 
unsafe
{
    fixed (int* pointer = a)
    {
        int* ptr = pointer;
        Console.WriteLine(*ptr);    // 1
 
        ptr += 1;   // 다음 위치로
        Console.WriteLine(*ptr);    // 5
 
        *ptr += 1;  // 값에 +1
        Console.WriteLine(*ptr);    // 6
 
        Console.WriteLine(Sum(ptr, ptr + 1));   // 16
    }
}
Console.WriteLine(string.Join(", ", a));    // 1, 6, 10

3. 참조 자료