최적화(Optimization)란 프로그램을 좀 더 빨리, 좀 더 작게 개선하는 과정을 의미한다.
최적화 기법
최적화를 위한 방법의 제일 첫째는 좋은 알고리즘을 선택하라는 것이다.
10,000개의 정수 배열을 정렬하라는 문제에서 버블 정렬을 사용하는 것과 퀵 정렬을 사용하는 것은 엄청난 차이가 있다.
같은 문제를 해결하는 여러가지의 알고리즘 중에서 가장 효율적인 것을 선택하는 것이
가장 근본적인 최적화 방법이다.
둘째, 함수를 적절히 사용하라. 함수를 사용하는 것은 사용하지 않는 것보다 분명히 속도면에서 불리하다.
왜냐하면 같은 역할을 하더라도 함수를 사용하면 함수 호출을 위한 사전절차가 더 포함되기 때문이다.
이를 오버헤드(Overhead) 현상이라고 한다. 반면에 함수 호출의 장점이라면 컴파일 결과 만들어지는 실행 파일의 크기가
작아진다는 것이다. 그래서 속도와 크기와의 연관성을 잘 생각해서 함수를 사용해야 한다.
셋째, 되도록이면 실수형을 사용하지 마라. 다른 정수형의 연산속도에 비해 너무도 더딘 속도이기 때문이다.
넷째, 반복문 내를 최대한 간단히 하라. 반복문은 for, do... while, while문 등이 있는데 이 내부에는 최대한 빠른 속도를
내도록 노력하라. 반복문이 만일 수천, 수만번 수행이 된다면 아주 작은 개선도 결과적으로 엄청난 시간 단축을 가져온다.
반복문 내를 간단히 하려면 함수 호출을 없애고, 필요한 계산은 반복문 밖에서 다 해 놓을 것과,
필요하다면 기계어로 직접 코딩을 하는 방법도 생각해 볼 수 있다.
다섯째, 재귀 호출 형태를 사용하지 마라. 재귀 호출은 소스의 이해라는 측면에서는 긍적적인 요소가 있으나
실행 속도면에서는 바람직하지 못하다. 이는 재귀 호출이 결국은 함수의 호출이기 때문이다. 또한 재귀 호출은 시스템의
내부 스텍을 사용함으로써 스택넘침으로 인한 에러를 유발할 수 있어 위험하다. 프로그램의 개발시에는
재귀 호출 형태를 사용하더라도, 최적화 단계에서는 재귀 호출의 제거 방법을 이용하라.
명심해야 할 것은 이 최적화의 단계는 항상 프로그램 작성시 최후의 단계여야 한다는 것이다.
즉, 일단은 효울성 보다는 읽기 쉬운 단순한 알고리즘을 사용하여 프로그램이 돌아가도록 해야한다.
그러고 난 연후에야 최적화에 대해 고려해야 한다.
'Programming > C, C++' 카테고리의 다른 글
배열 (0) | 2017.12.11 |
---|---|
데이터형에 관계없는 swap() 함수 (0) | 2017.12.11 |
void포인터, 함수 포인터 (0) | 2017.12.11 |
포인터의 포인터 (0) | 2017.12.11 |
포인터 연산자 (0) | 2017.12.11 |