■ Marshal 클래스를 사용해 비관리 메모리를 할당하는 방법을 보여준다.
▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; using System.Runtime.InteropServices; int byteCount = 256; // 소스 바이트 배열을 설정한다. byte[] sourceByteArray = new byte[byteCount]; for(int i = 0; i < byteCount; i++) { sourceByteArray[i] = (byte)i; } // 메모리를 할당받는다. IntPtr targetHandle = Marshal.AllocHGlobal(byteCount); // 소스 바이트 배열의 데이터를 할당받은 메모리에 복사한다. Marshal.Copy(sourceByteArray, 0, targetHandle, byteCount); // 할당받은 메모리의 데이터를 타겟 바이트 배열에 복사한다. byte[] targetByteArray = new byte[byteCount]; Marshal.Copy(targetHandle, targetByteArray, 0, byteCount); for(int i = 0; i < 256; i++) { Console.WriteLine(targetByteArray[i]); } Marshal.FreeHGlobal(targetHandle); |