[C++/CLI] Mixed-Type 사용시의 메모리 해제 문제
네이티브 C++에서의 DLL을 CLR 환경에선 Assembly라 부른다. 그런데 CLR 환경에선 한번 불러들인(Load) 어셈블리를 마음대로 해제(Unload)할 수가 없다. 애초에 System::Reflection::Assembly에는 Unload에 해당하는 함수 자체가 없다. 단 독립적인 메모리 공간을 갖는 애플리케이션…
네이티브 C++에서의 DLL을 CLR 환경에선 Assembly라 부른다. 그런데 CLR 환경에선 한번 불러들인(Load) 어셈블리를 마음대로 해제(Unload)할 수가 없다. 애초에 System::Reflection::Assembly에는 Unload에 해당하는 함수 자체가 없다. 단 독립적인 메모리 공간을 갖는 애플리케이션…
32비트 컴파일할 땐 문제 없던 C++/CLI 코드가 64비트로 컴파일하자 링킹 오류를 내고 죽었다. 다음은 실제 프로젝트 코드에서 나온 오류 메시지 그대로이다. 물론 알아볼 수 없게 소스 코드 이름이나 프로젝트 이름을…
Microsoft Visual C++ 2005를 사용한 프로필 기준 최적화 요약 링크 시간 코드 생성(LTCG)과 프로필 기준 최적화(PGO)를 사용하면 20% 이상 성능을 향상시킬 수 있다고 한다. ATL 서버 라이브러리와 도구 소스코드가 공개되었다.…
GC 모드 값에 따라 가비지 콜렉터의 개수가 달라진다고 했었다. 그러나 의문이 남았다. 한 프로그램에 애플리케이션 도메인이 여러 개 있을 때는 어떻게 될까? C++/CLI에서 Managed Thread와 Native Thread를 혼용해서 사용하면 어떻게…
Native C++로 작성한 소프트웨어를 C++/CLI로 포팅해야 하는 상황이었다. 컴파일러에 /clr 옵션을 주고 빌드하자 한번에 성공했다. 기뻐하며 F5 키를 눌러 실행시키는 순간, 런타임 오류가 발생했다. 각설하고 이틀 가량 조사하고 테스트한 결과,…
#pragma managed 또는 #pragma unmanaged를 섞어가며 코드를 작성해 놓으면, 디버깅 중에 지금 보고 있는 코드가 CLR 코드인지, Native 코드인지 구분이 안 갈 때가 있다. 이런 경우엔 우선 로컬 변수의 초기화가…
Server GC 멀티 프로세서(또는 멀티 코어)를 탑재한 컴퓨터에서만 작동한다. 각 프로세서마다 하나의 GC 힙(그리고 하나의 GC 쓰레드)를 할당하고, 가비지를 병렬로 수집한다. 세 가지 GC 모드 중 가장 성능과 확장성이 좋다.…
컴파일 C++ 프로젝트 전체에 /clr 컴파일 옵션을 주지 않고도 파일(.cpp) 별로 컴파일 옵션을 설정하는 것이 가능하다. /clr 옵션은 '/Yu: 미리 컴파일된 헤더 사용', '/Gy: 함수 수준 링크 사용' 등의 몇몇…
데스크톱용 백업 소프트웨어인 Norton Save & Restore를 구매해달라고 요청했지만, 안 된다는 답변을 받았다. 정책이 그렇다고 해서 후일 귀중한 시간을 절약해줄 파티션 이미지 백업을 안 할 수도 없었다. 그래서 대안을 찾아…
구글 팩 영문판에만 있는 구글 스크린세이버. 그 사이 새 버전이 나왔는데, 디자인과 기능 모두 향상됐다. 구글 스크린세이버에 대해 알아보자. 구글 스크린세이버 스냅샷 구글 팩 영문 사이트에 들어가야 구글 스크린세이버를 다운로드…