본문 바로가기

컴퓨터61

Logging Logging우리들은 자주 로그를 찍는다, 또는 찍어라 하고 말한다. 로그를 찍는것은 시스템의 상황을 외부 저장소에 기록하는 것을 의미한다. 약속된 특정 조건에서 약속된 내용을 저장하여 문제나 운영 상황을 파악하기 쉽게 만들어 주는 역할을 한다. 앞서 말한 dump도 로그의 일종이라고 생각한다.Log Library로그를 찍어야한다. 처음 생각하기 쉬운 방법은 fprintf등으로 파일에 출력하기이다. 직접 정보를 쉽게 다룰 수 있다는 점은 좋다. 하지만 로그 파일을 안정적으로 다루는 것은 또 다른 문제이다. 추가로 동기적 I/O 형태의 호출이므로 성능이슈도 뒷따른다. 혹여 멀티쓰레드 프로그래밍을 해야된다면, fprintf를 쓸 마음이 점점 사라지게 될 것이다.그리고 일반적으로 로깅을 할 때 하나의 자료에만.. 2015. 5. 16.
Exception Filter Exception FilterException이란 내 생각엔 버그다. 프로세스가 정상적인 동작을 할 수 없을 때, 예외 이벤트가 발생하여 운영체제에서 프로세스를 강제 종료시켜버린다. 좀 규모가 있는 프로그램을 만들어서 돌리다보면 (거의 대부분의 나의 코드에서) 예상치못한 Exception이 발생한다. 디버그 모드에서 테스트할때는 괜찮았는데, 리얼로 배포해서 돌리다보면 생각지도 못한 곳에서 예외가 발생하기도 한다. 예외를 깔끔히 처리하는 것은 안전한 코드를 생산적으로 처리하는데 도움이 된다.SEHWindows에서는 이 예외처리를 잘 할 수 있게 SEH라는 구조를 제공한다. 자세한 내용을 여기서 다루지는 않을 예정이다. 간단하게 설명하자면 정상적인 실행코드가 담기는 __try블록과, 종료처리 또는 예외 처리.. 2015. 5. 15.
Modern Effective C++ item 29 : move가 항상 좋다는 편견은 버려 move가 항상좋다는 편견은 버리자move sementic은 C++11에 등장한 큼지막한 변화의 한 축이다. 임시 객체에 대해서 Copy대신 Move를 하면 정말 번개같은 속도로 같은 기능을 대체할 수 있다고 들었던거같다. 정말로 마법같은 move의 훌륭함을 우리는 마음깊이 새기고 있었다. 하.지.만 이제는 그런 환상을 깰 시점이 온 것같다.move sementic을 지원하지 않는 경우C++ 98에 작성한 legacy 클래스들은 별도의 move 연산자들을 작성하지 않았기 때문에 move sementic으로 받아온다고 해도 별 이득을 볼수가 없다. item 27에서 보았던 move의 까다로운 자동생성조건을 생각해본다면, move 생성자 자체가 없을 가능성이 크고, 그렇다면 그냥 copy연산이 수행되기 때문.. 2015. 5. 13.
Modern Effective C++ item 28 : reference collapsing reference collapsing 이해하기item 23 에서 template parameter로 들어오는 타입이 lvalue인가, rvalue인가에 따라서 어떻게 템플릿 타입이 추론되는 지를 이야기 했다. 하지만 정확히 어떻게 universial reference가 초기화되는지는 이야기 하지 못했다. 이번 장에서 다루는 reference collapsing을 이해하면 universial reference의 초기화 방식에 대해서 정확히 알 수 있을 것이다.template 타입 추론에서 reference collapsingtemplate void func(T&& param);템플릿 인자 T의 타입 추론은 들어온 인자 param이 lvalue인지 rvalue인지에 따라서 결정된다. 이때 사용되는 결정방법은.. 2015. 5. 13.