반응형
C#에는 포인터가 없다고 하였다..
하지만, 사용할 수 있는 방법은 있다..

그게 바로 "unsafe"란 키워드를 통해서이다. 말 그대로다.. 이거 안전하지 않아.. 라고 이야기 해주고 사용하는 것이다. 포인터란 녀석이 메모리를 직접적으로 억세스(물리적 메모리를 직접 억세스 하는건 아니지만..)하기 때문에 소위말하는 뻑나는 상황을 연출 할 가능성이 높아지기 때문이다.

자 어떻게 사용하는가를 보면,

사용하려는 곳에 unsafe만 붙여주면 된다.. 그게 클래스건 함수건간에..

클래스에 사용한 예는..

class unsafe pointClass
{
    static void funciton(int *x)
    {
         *x = 100;
    }
}
뭐 이런식이고,

함수에 사용하는 방법은..

class pointClass
{
    unsafe static void function(int *x)
    {
         *x = 100;
    }
}

이고,

블럭으로 묶는 방법은

class pointClass
{
    unsafe
    {
         static void function(int *x)
         {
               *x = 100;
         }
    }
}

그리고 C#에서는 특히 포인터를 사용하였을 경우에 가비지 콜렉터에 의한 메모리 이동이 발생할 수 있어 더욱 뻑날 가능성이 높아진다.

그래서 굳이 포인터를 사용해야 하는 경우를 대비해 C#에서는 "fixed"란 키워드도 함께 제공하고 있다.. 이름에서 알수 있듯, 고정시키는 기능을 가진 키워드이다.

사용법을 보자.. 이것 또한 기본적으로 적용될 블럭을 지정하는 방식으로 사용한다.

class fixedClass
{
     unsafe static void function(byte[] source, byte[] target)
     {
         fixed(byte* s = source, byte* t = target)
         {
               for(int i=0; i<source.Length; i++)
                   *(t+i) = *(s+i);
         }
     }
}

뭐 이런식으로 사용하면 된다.. 그런데 포인터 사용을 지양하는 만큼, 사용할 일은 거의 없지 않을까 싶다.

반응형

+ Recent posts