Programming/C# - Window

C#/ unsafe 키워드

esoog Polaris 2023. 12. 8. 20:54
반응형

#  `unsafe` 키워드

일반적인 안전한 언어 기능을 벗어나서 포인터 연산 및 포인터 산술을 수행할 수 있도록 하는 기능을 제공합니다. 이는 일반적으로 관리되는 환경에서 사용되는 안전한 언어로 개발되었지만, 특정 상황에서는 낮은 수준의 메모리 조작이 필요할 수 있기 때문입니다. `unsafe` 키워드를 사용하는 것은 보안 문제를 야기할 수 있으므로 주의해서 사용해야 합니다.

 


1. **포인터 조작:** 

메모리 주소를 직접 조작하여 빠르게 데이터에 접근할 수 있습니다. 이는 성능 향상을 위해 일부 알고리즘에서 사용될 수 있습니다.

    unsafe
    {
        int x = 10;
        int* ptr = &x;
        Console.WriteLine(*ptr); // 포인터를 통해 변수의 값을 읽음
    }



2. **외부 코드와의 상호 작용:** 

외부 라이브러리나 플랫폼에 대한 접근이 필요한 경우, 특히 네이티브 코드와의 상호 작용이 필요한 경우 `unsafe` 키워드를 사용할 수 있습니다.

 


3. **고정 크기 배열 및 메모리 복사:** 

`stackalloc` 키워드와 함께 사용하여 고정 크기의 배열을 할당하거나, `memcpy`와 유사한 작업을 수행할 수 있습니다.

    unsafe
    {
        int* array = stackalloc int[10];
        // 또는
        int[] source = { 1, 2, 3, 4, 5 };
        fixed (int* srcPtr = source)
        {
            // 메모리 복사 등의 작업 수행
        }
    }



`unsafe` 코드를 작성할 때는 주의가 필요하며, 코드의 가독성과 유지보수성이 저하될 수 있습니다. 또한 잘못된 사용은 메모리 오류 및 보안 취약점으로 이어질 수 있으므로 신중하게 고려해야 합니다. 보통 안전한 대안을 찾을 수 있는 경우에는 `unsafe`를 피하는 것이 좋습니다.

728x90

'Programming > C# - Window' 카테고리의 다른 글

C#/ Tip 1  (2) 2024.01.03
C#/ 가상 키코드(virtual key)  (2) 2023.12.08
C#/ FTP 파일 서버 사용하기  (0) 2023.12.03
C#/ 압축파일 만들기  (2) 2023.12.03
C#/ 디렉터리 및 파일 copy와 delete  (0) 2023.12.03