부재 : 단독 연산자 보단 =이 붙은 연산자가 대체적으로 효율적이였다! 이유 1. 일반적으로 대입 형태 연산자는 단독 혀애 연산자보다 효율적이다. 왜냐하면, 단독 형태 연산자는 새 객체를 반환하는 형식으로 만들어야 하지만, 대입 형태 연산자는 왼쪽 인자에다가 처리 결과를 기록하기 때문에, 이 연산자의 반환값을 담을 임시 객체를 만들어 놓을 필요가 없기 때문이다. 2. 포인터는 대입 형태 연산자와 단독 형태 연산자를 동시에 제공함으로써 클래스 사용자에게 효율과 편리성을 경우에 따라 저울질할 기회를 줄수 있다는 것 예) result = a + b + c+ d; // 세 개의 임시 객체가 사용되는데 임시 객체 하나마다 operator+가 호출된다. Or result = a; // 임시 객체가 필요 없다. re..
책 정리 검색 결과
부재 : 임시객체 생성을 줄여 보자. 이유 1.묵시적 타입변환으로 임시객체가 만들어 지어, 자원 낭비가 되기 때문이다. 구현방법 1. 오버로딩을 하여, 임시객체가 생성되는것을 막는다. (생성자가 묵시적 타입변환으로 임시객체가 생성되는 조건에 대해서 알고 있어야 한다.) 주의점 1. 불필요한 오버로딩은 오히려 더 나쁘다. 참조 1. 오버로딩되는 연산자 함수는 반드시 최소한 한 개의 사용자 정의타입을 매개변수로 해야 한다. 개인적인 생각 1. 편역자는 암시적 타입변환이라 하지만 나같은 경우에는 묵시적 타입변환으로 말하는게 좋을것 같다. 컴파일러 입장에선 암시적이다. 컴파일러는 사용자가 그렇게 시킨것이라고 암시적으로 알렸다고 판단하기 때문이다. 하지만 사용자는 컴파일러가 자신에게 말하지도 않고 형변환을 시켜준..
부재 : 반환값의 거품을 빼자. 이유 1. 객체의 값으로 반환하는 함수에 대해서 값에 의한 반환은 막을수가 없기 때문에 2. 참조자에 의한 반환값은 별도의 주의가 너무 필요하기 때문에(물론 아닌것도 있지만) 구현 방법 1. 컴파일러가 반환값을 최적화 하게 만들자. (반환값 최적화(return value optimization : RVO) 라고 컴파일러가 분명히 지원한다) 세부 구현 방법 1. 값을 반환하는 함수에서 임시객체로 반환을 하게 만들면 된다. 코드 const Rational operator *(const Ratioal& lhs, const Ratioal& rhs) { return Rational(생성자 호출 인자를 넣어 준다); }경우에 따라 inlie 화를 시켜 줄수도 있다.
부재 : 효율의 복병, 임시객체 개념정리 : 임시 객체란? 이름 없는 객체로, 발생되는 경우가 두가지가 있다. 1. 함수 호출을 성사시키기 위해 암시적 타입변환이 적용 될때 2. 함수가 객체를 값으로 반환 할 때 이유 1. 불필요한 임시객체 생성은 효율에 영향을 끼치기 때문이다. 해결 방법 1. 암시적 타입변환이 일어나지 않게 한다.(설계를 바꾸던가, 비상수 객체 참조자를 넘기던가) 2. 함수가 객체를 값으로 반환 할 때는 어쩔수 없기 때문에, 컴파일러가 최적화를 맞기자. 참조 1. C++ 에서 인자값이 비상수객체 참조자일 경우 암시적 타입변환이 일어나지 않는다. 왜냐하면 참조자는 전달되는 인자값이 변경되길 바랬을때 임시객체가 변경되어 잘못된 값으로 바뀔수가 있기 때문이다. 개인적인 생각 1. 사실 타입..
부재 : 처리 비용의 거품을 빼자. (과도 선행 평가) 이유 1. 자주 요구되는 작업의 데이터는 미리 해두어, 프로그램 효율을 높일수 있다. 구현방법 1. 캐싱 예) 데이터 베이스에 접근 하려 할때 2. 미리가져오기 예) 시스템 프로세스를 사용 할때. 참조 1. STL의 반복자 it 으로 it->second 로 쓸수 있겠지만 STL의 반복자는 포인터가 아니라 객체이기 때문에 (*it).second 이 이식성 면에서 더 좋다 하지만 1995년 7월 STL 반복자는 -> 를 지원해야 한다고 했기 때문에 요즘은 ->를 써도 무난하다. 개인적인 생각 1. 지연 평가와 선행평가는 무엇을 쓰던 상관이 없을것 같다. 정작 중요한건 둘다 필요한 부분에서 쓸수 있다면 효율이 매우 높을거 같다. 2. 모든것을 즉시평가 기..
부재 : 해야 할 때만 하자. 이유 1. 최선의 속도를 내는 방법은 아무것도 하지 않는 것이기 때문이다. 구현 방법 1. 참조 카운팅(불필요한 객체 복사 피하기) 2.데이터 읽기와 쓰기를 구분하기(특화된 작업으로 처리하기) 3. 지연 방식의 데이터 가져오기(필요한 할때 필요한 부분만 읽어 오기) 4. 지연 방식의 표현식 평가(필요할 때에 필요한 값을 평가 하기) 주의점 1. 지연 평가는 만병 통치약이 아니다. 오히려 성능을 나쁘게 할때가 있다.(몰아서 처리 하려고 할때) 개인적인 생각 1. 확실히 미세튜닝으로 성능 향상을 노리는것 보다, 알고리즘을 더 개선시키는게 더 효율적이다.
최근댓글