이번 항목은 최적화 시리즈 중에서 복사 미루기를 통하여, 성능을 향상 시키는 방법을 이야기 하고 있다. 그 예제로 허브셔터는 문자열 클래스를 만들어 보기로 한다. 아래 코드를 보자. namespace Original { class String { public: String();// 빈 채로 시작 ~String();// 버퍼 지우기 String( const String& );// 완전한 복사본 받기 void Append( char );// 문자 하나 붙이기 // ... operator= () 등 생략 ... private: char *buf_;// 할당된 버퍼 size_t len_;// 버퍼의 길이 size_t used_;// 실제로 사용된 char의 수 }; } 자, 이 코드에서 Original::Str..
최적화 검색 결과
불필요하거나 임시로 사용되는 개체들은 작업을 매우 어렵게 만들거나(임시 개체에 작업할수 있다는 위험성) 성능을 떨어뜨리는 주요 요인이다.(불필요한 복사 생성자 호출로 인한 오버헤드) 이런것들이 어떤 것들이 있는지 알아보자 예제 코드~ #include #include /* 아마도 이런 녀석이 있어야 겠다. operator== 도 만들어야겠고 말이다. 왜 addr을 public 으로 했는지는 스스로 판단 하길..*/ class Employee { public: bool operator==( const std::string& rhs ) const { return addr == rhs; } public: std::string addr; }; // 이건 내가봐도 촤악의 함수다. std::string FindAdd..
부재 : 반환값의 거품을 빼자. 이유 1. 객체의 값으로 반환하는 함수에 대해서 값에 의한 반환은 막을수가 없기 때문에 2. 참조자에 의한 반환값은 별도의 주의가 너무 필요하기 때문에(물론 아닌것도 있지만) 구현 방법 1. 컴파일러가 반환값을 최적화 하게 만들자. (반환값 최적화(return value optimization : RVO) 라고 컴파일러가 분명히 지원한다) 세부 구현 방법 1. 값을 반환하는 함수에서 임시객체로 반환을 하게 만들면 된다. 코드 const Rational operator *(const Ratioal& lhs, const Ratioal& rhs) { return Rational(생성자 호출 인자를 넣어 준다); }경우에 따라 inlie 화를 시켜 줄수도 있다.
최근댓글