티스토리 뷰

C#

[C#] 고정크기배열 사용방법 #fixed

inasie 2008. 12. 25. 18:07

다른 언어로 작성된 코드와 같은 기존코드, DLL, COM 프로젝트를 사용하다보면 고정크기의 배열을 사용해야 할 때가 있다.

C# 1.1까지의 경우 고정크기를 사용하지 못하였다.

예를들어 다음과 같이 구조체를 선언하였을 경우

public struct MyArray

{

    public char[] pathName;

    private int reserved;

}


구조체의 크기는 8바이트가 된다. 

pathName배열의 경우 힙에 할당된 배열에 대한 참조가 된다.(포인터의 역할)

4바이트라는 것이다.


이러한 문제점을 해결하기 위해 C# 2.0부터는 fixed 문을 사용하여 고정크기의 배열을 만들 수 있게 하였다.

public struct MyArray

{

    public fixed char pathName[128];

}


고정크기 char버퍼는 인코딩과 상관없이 항상 2바이트씩을 저장하게 된다.

따라서 위와 같은 구조체의 크기는 128바이트가 아닌 256바이트로 잡히게된다.


또한 fixed문을 사용하기 위해서는 반드시 usafe 영역에 있어야 한다.

첨부 : fixed
반응형
댓글