mutable 키워드 DarkKaiser, 2007년 6월 12일2023년 9월 4일 class CTextBlock { public: std::size_t length() const; private: mutable std::size_t textlength; mutable bool lengthIsValid; } std::size_t CTextBlock::length() const { if (!lengthIsValid) { textLength = std::strlen(pText); // 문제 없습니다. lengthIsValid = true; // 문제 없습니다. } } mutable는 비정적 데이터 멤버를 비트수준 상수성의 족쇄에서 풀어주는 키워드입니다 Continue Reading
volatile 저장소 DarkKaiser, 2007년 6월 12일2023년 9월 4일 컴파일러의 최적화에 따라서는, 변수 N의 값을 다시 변수 N에 저장하는 대신 하나의 레지스터에 남겨 둘 수도 있다. 이런 문제를 컴파일러 최적화 옵션들을 변경하는 식으로 해결하는 것은 코드 전반의 성능에 나쁜 영향을 미칠 수 있다. 올바른 해법은 ANSI C의 volatile 저장소 한정사를 사용하는 것이다. volatile 한정사는 컴파일러에게 변수의 값이 언제라도 바뀔 Continue Reading
pragma의 어원 DarkKaiser, 2007년 6월 12일2023년 9월 3일 이거 궁금하신 분들이 만으리라 생각됩니다. 유래가 Ada까지 거슬러 가는군요. (http://archive.adaic.com/standards/83rat/html/ratl-02-01.html) pragma, 그리스어로 action 이라는 뜻이군요. 컴파일러에게 특별한 방법으로 action을 취하라는 프리프로세서와 유사한 녀석이죠^^ 저의 의문 하나가 풀리는 순간입니다. [커닝헌 책에] PP233, A12.8 Pragmas Continue Reading
실수형에서 정수형 형변환 성능 높이기 DarkKaiser, 2007년 6월 12일2023년 9월 4일 일반적으로 실수형에서 정수형으로 형변환을 하는 경우가 종종 있다. 이때 보통 묵시적으로 컴파일러가 알아서 해 줄수 있지만 이렇게 할 경우에 속도가 상당히 느리다. 한두번은 빠르게 느껴져도 이게 백만번, 천만번일 경우 형변환 부분에서 전체 함수의 90%까지 잡아먹을 수도 있다. 이럴경우 아래의 코드를 이용하여 성능을 30% 정도 끌어올릴 수 있다. 이때, 주의할 점은 Continue Reading