본문 바로가기

.NET/CLR

(12)
coreclr 소스코드로 알아보는 .NET 4.0의 모듈 로딩 함수 http://sysnet.pe.kr/221117458825(그냥 기록 차원에서 남겨둡니다. ^^) .NET 4.0 이후부터 DLL을 LoadLibrary로 로딩하지 않는다고 했습니다. CLR 4.0 환경에서 DLL 모듈의 로드 주소(Base address) 알아내는 방법 ; http://www.sysnet.pe.kr/2/0/11325 정말 그럴까요? ^^ 이를 알아보기 위해 coreclr 소스 코드를 이용해 추적해 봤습니다. 우선 단서는 GetHINSTANCE를 역어셈블한 코드에서 시작했습니다. [SecurityCritical] public static IntPtr GetHINSTANCE(Module m) { if (m == null) { throw new ArgumentNullException("m")..
CLR 4.0 환경에서 DLL 모듈의 로드 주소(Base address) 알아내는 방법 http://sysnet.pe.kr/221117004140(예전에도 잠깐 언급했지만) CLR 4부터, 그러니까 .NET Framework 4부터 DLL 로딩을 Win32 API의 LoadLibrary를 이용하지 않도록 바뀌었기 때문에 네이티브 모듈 열거에서는 .NET 모듈이 누락되는 문제가 있습니다. 가령 다음의 코드를, // 이 코드를 실행하는 콘솔 프로그램은 ClassLibrary1.dll을 참조해 사용하고 있음 foreach (ProcessModule item in Process.GetCurrentProcess().Modules) { Console.WriteLine(item.FileName + ": 0x" + item.BaseAddress.ToString("x")); } .NET 2.0 ~ 3.5에..
Finalize Method는 왜 필요한가? 오늘 같은 개발자와 얘기를 했다. 아래의 포스트된 DataTable은 꼭 dispose해줘야 하는가에 대해서다. 거기 예제 코드를 보면 DIspose하는 부분이 나오는데 많은 개발자 분들이 오해를 하기를 Dispose를 시켜주면 메모리 해제를 바로 시켜준다고 착각하고 계신다. 앙... 그럼 안되는데 ^^; 모든 managed code들은 CLR에서 관장하게 된다. 메모리 할당에서 부터 해제까지 CLR안에서 격리되어 움직인다. 닷넷의 가장 좋은 점이 무엇인가 바로 메모리 관리를 GC가 알아서 해준다는 것이다. CLR Loader가 메모리를 할당해주고 그 메모리를 해제시켜주는 몫은 바로 CLR의 GC가 담당하게 된다. 그럼 의문이 생긴다. 시스템 자원을 썼을때 어떻게 해줘야하나? 이러한 메모리 해제를 위해서..
.NET 4.5: Vance Morrison - Performance and Memory Diagnostics기사 누가좀 해석좀 ㅋㅋ^^
동기화에 필요한 object header Object Header 에는 많은 정보가 포함도어있다 .. 모든 스레드에서 동기화를 시키기 위해 object header에는 스레드 동기화에 대한 정보를 가지게 된다. 아래의 그림은 일반 object header와 sync block에 관한 object header를 보여주고 있다. 위의 도표는 managed heap에 저장된 object들을 표시하고 있다. 각 object 들은 object header와 type handle, object instance 를 하나의 묶음으로 들어가게 되는데 object header 4byte , type hadle 4byte로 구성되어있다. 어떤 object가 멀티 스레딩에서 동기화를 요한다면 object header에 bitmask를 0x80000001 이런식으로 ..
Inside Re-JIT(Re Jit)이라는 기능이 추가됐다고 하네요(영어잘하고싶닼ㅋㅋ) CLR 4.5 background gc에 이어 2번째 이번에는 CLR 4.5에 Re-Jit이라는 기능이 추가 됐다고 하네요 아 나 영어좀 잘하고 싶다.(영어의 문제가 아닌가? 개념 문제인가?)ㅋㅋ 아무튼 함 들어보자
CLR 4.5 - Server Background GC http://channel9.msdn.com/posts/Maoni-Stephens-CLR-45-Server-Background-GC 아 힘드네요 못알아 듣겠네요 누가좀 번역좀 해줘요
Pinned된 object와 조각화(CLR) 메모리에서 pinned object라는 얘기를 누구나? 한번쯤은 들어봤을 거다.. 이게 과연 뭘까? 말그대로 꽂혀있는 object다 무슨말인고 하니 GC가 구동됐을때 pinned object는 application root에서 참조되고 있을때 다음세대로 프로모션하게 되는데 이놈들은 그렇지 않다 그리고 collection이 일어나면 메모리 compaction(재정리및할당)이 일어나게 되는데 이때도 이놈들은 예외가 된다. 왜 이런 기능이 필요할까 ? 간단하게 예를 들어보겠다. 어떤 managed code에서 p/invoke나 com같은 native한 메서드에 인자값으로 managed pointer를 넘겨줬다고 하자 그후 GC가 일어나면 인자값으로 넘긴 놈도 compcation이 일어나 메모리 주소가 바뀌게 ..