[C#] C#에서 unsafe 키워드 사용 방법
2020. 3. 10. 23:07
728x90
반응형
C# 에서는 일반적으로 포인터를 사용하지 않지만, 간혹 C++ 에서 사용하던 Class를 가져오면서 포인터를 사용해야 하는 경우가 발생한다. 포인터를 사용하면 CLR에서 안전성을 책임지지 못하고, 불완전한 코드가 된다고 하며 에러를 발생하는데, 이렇게 예전 코드를 사용해야 할 경우, 빌드 속성을 변경해줌으로써 unsafe 코드를 사용 할 수 있다.
1. 사용 방법
형식 또는 멤버 선언에서 unsafe 한정자를 사용할 수 있으며, 이렇게 선언해줄 경우 안전하지 않은 컨텍스트로 간주됩니다.
unsafe private uint reload()
{
uint s0 = 0, s1 = 0;
int j = 0;
fixed (uint* p0 = &mt_state[0])
{
uint* pS = p0;
uint* p1 = p0;
... 중략 ...
s1 = mt_state[0];
s1 ^= (s1 >> 11);
s1 ^= (s1 << 7) & 0x9D2C5680;
s1 ^= (s1 << 15) & 0xEFC60000;
}
return (s1 ^ (s1 >> 18));
}
2. fixed 키워드
fixed 지시어는 unsafe 컨텍스트에서만 허용 됩니다.
클래스가 인스턴스화 되면 CLR에 의해 언제든지 메모리가 이동 될 수 있는데, fixed 지시어를 이용하면 해당 코드에 들어간 변수 및 객체는 가비지 콜렉팅이 발생할 때 주소 재배치 대상이 아니게 됩니다.
3. 빌드 속성
unsafe 한정자를 사용할 경우에는 안전하지 않은 코드 허용(F) 를 체크해야지만, 빌드 오류가 나지 않습니다.
728x90
'Program Language > C#' 카테고리의 다른 글
[C#] ICloneable 인터페이스를 이용한 객체 복사 (1) | 2020.05.19 |
---|---|
[C#] MSBuild 빌드 시 C# 언어 버전 변경 (0) | 2020.03.26 |
[C#] SQL Injection 예방 코드 (1) | 2020.02.12 |
[C#] const와 readonly의 차이 (0) | 2020.02.06 |
[C#] EditorConfig를 이용한 코딩규칙 정형화 (0) | 2020.01.30 |