본문 바로가기

C#3

C# 클래스 할당시 메모리 구성 디버깅 디스어셈블링 및 실제 메모리를 디버깅하면서 데이터와 객체를 할당시 어떤 구조로 메모리에 올라가는지와 C#에서 클래스를 할당하면, 힙이 어떻게 동작하는지를 보자 쉽게 보기 위해서 예제는 x86(32bit)로 컴파일되었고 이를 기준으로 설명합니다. 예제로 사용할 모습은 이와 같다. 아무 클래스나 하나 만들고 그 안에 문자열 하나와 int 하나를 선언, 구조체 역시 메모리를 살펴보기 쉽게 int형 두개로 선언했다. 먼저 Case1 메소드를 디버깅해보자 Watch창에서 살펴보면 현재 testObject의 상태를 알 수 있고, '&testObject'로 testObject의 실제 메모리 주소를 볼 수 있다. C# 문법에서는 직접적인 포인터를 사용하려면 unsafe 옵션을 이용해서 사용 할수 있으나, 이는 그리 권.. 2017. 6. 24.
C# 리플렉션으로 Struct(구조체 / ValueType) 수정(Set) 하기 StackOverflow에 매우 좋은 답변으로 달려 있는 내용인데, C#에서 Reflection을 이용해서 구조체(Struct)의 맴버 변수를 Set(Get)하려고 하면 제대로 작동되지 않는다. 접근할 수 없는 이유는 Struct는 ValueType으로 Stack에 할당되어 있기에 Reflection 연산으로 접근 할 수 없기 때문이다. 이를 의도된 Boxing을 통해서 Heap영역으로 옮긴 후 Reflection을 사용하는 방법이다. 물론 이때 다시 맴버 변수 접근으로 값을 가져오려면 Unboxing을 해야한다. 생각보다 퍼포먼스 손해가 많아 보이니, 꼭 필요한 경우나 어쩔수 없는 최후의(?) 상황에서 사용을 하자 이해를 돕기 위한 예시 코드는 아래와 같다 // 테스트로 사용할 구조체 선언 public.. 2017. 6. 19.
[ToolFramewrok] 게임엔진과 툴을 연결하는 구조 1 최근 백수라 집에서 놀다보니, 여행을 가고 싶지만 여러여건상 이것도 쉽진 않군요( 언제나 갈 예정임 ㅋ) 뭐 여하튼!! 집에서 쉬다보니 컨디션도 꽤 좋아졌고 해서 예전에 KGC2011에서 강연했던 주제를 제대로 정리하고자 하는 시간을 갖으려 합니다. ㅎㅎ 오늘이 그 첫번째 시간이군요. 이게 총 몇개로 이루어질지는 모르겠지만 해보는데까지 해봅시다. 먼저 앞으로의 계획을 대략적으로 정리하자면 아래와 같습니다. - 엔진과 툴의 이종간 연동을 위한 구조 설계( DLL Interop을 이용 C/S모델로 설계해서 C++과 C#을 적절히 사용 ) - WPF(C#) 에서 Navtive DirectX Rendering 하기 (엔진의 Rendering 기능을 연결해서 WPF 컨트롤러에 붙이는 거 ) - 툴 자체를 Plug.. 2014. 3. 26.