상세 컨텐츠

본문 제목

fixed

C#

by 탑~! 2018. 6. 29. 14:58

본문

unsafe 영역안에서 포이터를 사용하는건 스택으로 데이터를 저장하는 값형식의 변수에서만 가능합니다. 참조형식의 변수에서 포인터를 사용할 수 없는 이유는 참조형식의 데이터는 힙에 할당되고 힙은 가비지 컬렉터에 의해 위치가 바뀔 수 있기 때문입니다. 결국 참조형식의 주소를 갖고 있던 포인터는 언제라도 전혀 엉뚱한 곳을 가리킬 수 있기 때문입니다.

 

fixed는 힙에 할당된 참조 형식의 인스턴스를 가비지 컬렉터가 건드리지 못하게 하여 위에서 말한 문제를 해결할 수 있도록 합니다.

 

static void Main()
{
    unsafe {
        string s = "abcdefg";

        fixed (char* c = s.ToCharArray()) {
        for (int i = 0; i < s.Length; i++)
            Console.WriteLine(*(c + i));
        }
}

 

string 형은 참조형으로 값을 힙에 할당합니다. 이 string형의 시작주소를 포인터 c에 할당할때 fixed를 사용하므로서 string형인 s 인스턴스의 힙주소는 고정될 것입니다.



출처: http://lab.cliel.com/entry/C-fixed?category=478966 [CLIEL LAB]

'C#' 카테고리의 다른 글

STACK / QUEUE  (0) 2018.06.29
람다식 (LAMBDA EXPRESSION)  (0) 2018.06.29
문자열 보간($)  (0) 2018.06.29
nameof  (0) 2018.06.29
dynamic  (0) 2018.06.29

관련글 더보기