C# - unsafe와 fixed

2015. 2. 3. 11:23Programming/Etc

C#에서는 기본적으로 관리되지 않는 메모리 조작은 할 수 없게 되어있는데

다음과 같은 옵션을 체크하면 포인터와 같이 메모리를 조작할 수 있다.




이 옵션 없이 unsafe 지시어를 사용하면 빌드 오류가 발생한다.




소스코드를 보면

unsafe 키워드 스코프 안에서

주소 및 포인터 사용을 하고 있다.


그럼 fixed 지시어는 무엇일까?


클래스가 인스턴스화 되면 CLR에 의해 언제든지 메모리가 이동될 수 있는데

이렇게 고정되지 않은 인스턴스를 포인터로 받아 사용하게 되면

언제든지 실행 중에 오류가 발생할 수 있다.


따라서 fixed 지시어를 사용하여 이 스코프 안에 코드를 넣으면 해당 코드에 

들어간 변수 및 객체는 가비지 콜렉팅이 발생할 때 주소 재배치 대상이 아니게 된다.


상세한 내용은 MSDN 참조


unsafe

fixed