VC++ 10은 C++0x나 병렬 프로그래밍 라이브러리 이외에도
툴적인 측면에서도 여러 좋은 기능들이 추가 되었습니다. 알고 있으면 작업할 때 편리한데 시간이 부족하여
제가 아직 자세하게 찾아보지 못해서 소개하지 못한 것이 많이 아쉽습니다. 그래서 짥은 것이라도 틈틈이
시간나면 소개하려고 합니다.
오늘 101호실에서 5시에
강연을 했습니다. 그런데 강연을 매끄럽게 하지 못해서 참석하신 분들에게 죄송스럽네요. 대부분 Demo 위주로 할 예정이라고 너무 쉽게 생각하고 연습을
제대로 하지 않아서 시간 관리도 제대로 못했고 말 연결도 매끄럽지 못했습니다. 반성하겠습니다.
오늘 제대로 못한 부분은 너무 뒷북 치는 것 같지만 블로그를 통해서 전달하도록 하겠습니다. 다음에는 연습 많이 하겠습니다. 그리고 주제도 좀 더 흥미로운 것으로
하겠습니다. 이번 강연은 내용이 많이 평이했던 것 같네요. 오히려
회사에서 사용하고 있는 유닛테스트나 자동테스트, 덤프 파일 관리 등을 이야기 하는 것이 더 좋았지 않았을까
생각합니다.
앞서 이야기 했듯이 오늘 다 못한 이야기는 블로그를 통해서 꼭 전달하겠습니다.
오늘 강연에서 사용했던 Demo 소스 파일도 첨부합니다. 참고로 Demo_08이 google-breakpad를 사용한 프로젝트인데 Demo_08를 빌드하기 위해서는 google-breakpad를 설치후 Demo_08의 솔루션 속성 정보에서 헤더파일과 라이브러리 설정을 수정해야합니다.
1 프로세스 마다 FLS의
최대 값은 128이기 때문에 129 이상의 FLS 할당을 하면 이 현상이 발생합니다.
FLS를 지원하지 않은 OS에서는 Thread Local
Storage(이하
TLS)를 사용합니다. Microsoft Windows
2000 이후의 TLS의 최대 값은 1088입니다. FLS은 통상 Fiber 내에 국소적으로 값을 보존하기 위해 사용되어
Thread 보다도 가볍게 처리하므로 TLS 보다도 적은
용량이 설정되어 있습니다.
회피 방법
애플리케이션에 사용하는 DLL의 Visual C++ 컴파일 옵션으로 /MT 옵션을 사용하고 있는 경우는
/MD 옵션으로 변경하여 빌드 합니다.
/MT 옵션에서 정적으로 C 런타임 라이브러리를 사용한 경우 각각 모듈마다 C 런타임 라이브러리의
인스턴스가 존재하기 때문에 DLL의 수와 같은 수의 FLS가
할당 됩니다.
/MD 옵션으로 동적으로 C 런타임 라이브러리를 사용하는 것에 의해 같은 버전의 C 런타임
라이브러리의 인스턴스가 하나가 되어 FLS도 DLL의 수에
관계 없이 하나가 할당됩니다.
컴파일 옵션의 변경 순서는 다음과 같습니다.
Visual C++ .NET 2003, Visual
C++ 2005 또는 Visual C++ 2008의 솔루션 탐색기에서
프로젝트를 연다.
댓글