[C++/CLI] 관리되는 함수에서 네이티브 함수를 호출할 때의 오버헤드
2007.07.20 실험 조건을 조금 바꿔서 테스트를 다시 해봤다. 지난번엔 Debug 모드로 컴파일했는데, 이번에는 Release 모드에서 Use Link Time Code Generation 최적화 옵션을 추가했다. 뿐만 아니라 /clr 옵션을 제거한 완벽한 네이티브…
2007.07.20 실험 조건을 조금 바꿔서 테스트를 다시 해봤다. 지난번엔 Debug 모드로 컴파일했는데, 이번에는 Release 모드에서 Use Link Time Code Generation 최적화 옵션을 추가했다. 뿐만 아니라 /clr 옵션을 제거한 완벽한 네이티브…
네이티브 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 코드인지 구분이 안 갈 때가 있다. 이런 경우엔 우선 로컬 변수의 초기화가…
Advanced Micro Device는 지난 금요일 Transmeta에 750만 달러를 투자하기로 하였다고 합니다.회사측의 언급으로는 주식의 가치가 앞으로 어떻게 될지는 일종의 도박과도 같지만 거래는 Transmeta의 우선주에 대해 교환으로 이뤄질 것이라고 합니다.두회사 모두 즉각적인…
Server GC 멀티 프로세서(또는 멀티 코어)를 탑재한 컴퓨터에서만 작동한다. 각 프로세서마다 하나의 GC 힙(그리고 하나의 GC 쓰레드)를 할당하고, 가비지를 병렬로 수집한다. 세 가지 GC 모드 중 가장 성능과 확장성이 좋다.…
컴파일 C++ 프로젝트 전체에 /clr 컴파일 옵션을 주지 않고도 파일(.cpp) 별로 컴파일 옵션을 설정하는 것이 가능하다. /clr 옵션은 '/Yu: 미리 컴파일된 헤더 사용', '/Gy: 함수 수준 링크 사용' 등의 몇몇…