development

루프 내부 또는 외부에서 안전하지 않은 것을 사용하는 것이 어떤 차이가 있습니까?

big-blog 2020. 11. 18. 09:23
반응형

루프 내부 또는 외부에서 안전하지 않은 것을 사용하는 것이 어떤 차이가 있습니까?


과거에는 안전하지 않은 것을 사용할 필요가 없었지만 이제는 비트 맵을 조작하는 포인터로 작업하는 데 필요합니다.

달리 나타내는 문서를 찾을 수 없었지만 안전하지 않은 작동 방식과 루프 내부 또는 외부에서 사용하는 데 차이가 있는지 더 잘 이해하고 싶습니다.

하는 것이 더 낫습니까?

unsafe
{
    for (int x = 0; x < maxX; x++)
    {
        for (int y = 0; y < maxY; y++)
        {           
            //Unsafe pointer operations here.
        }
    }
}

아니면할까요? :

for (int x = 0; x < maxX; x++)
{
    for (int y = 0; y < maxY; y++)
    {   
        unsafe
        {       
            //Unsafe pointer operations here.
        }
    }
}

unsafekeyword는 수행중인 작업을 알고 있음을 컴파일러에 알리는 데 사용하는 마커입니다. 주요 목적은 코드 문서화와 유사합니다. unsafe블록은 관리되지 않는 영역으로 지정한 코드의 일부를 보여줍니다. 실제 코드 실행 에는 영향을 미치지 않습니다 .

이를 염두에두고이 안전하지 않은 영역의 크기를 최대한 줄이는 것이 합리적입니다. 즉, 두 번째 접근 방식이 첫 번째 접근 방식보다 낫다는 것을 의미합니다.

메서드를 표시하고 클래스를로 표시하는 두 가지 다른 대안 unsafe도 안전하지 않은 블록이 코드의 가능한 가장 작은 부분에 배치 될 때 접근 방식보다 열등 하다는 점을 언급 할 가치 가 있습니다.


unsafe컴파일러가 허용 하고 출력을 생성 할 표현식을 변경 합니다. 자체적으로 런타임 오버 헤드를 부과하지 않습니다. 를 필요로하지 않는 표현식의 unsafe경우 컴파일러는 unsafe컨텍스트 내에서든 아니든 동일한 코드를 내 보냅니다.

컨텍스트 내에서만 사용할 수 있는 식에 대한 자세한 unsafe내용은 C # 언어 사양 의 섹션 18을 참조하는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/34948627/does-it-make-any-difference-to-use-unsafe-inside-or-outside-a-loop

반응형