프로그래밍을 지도하는 관련된 책들(Code Complete, Effective C++등)을 보게 되면, 인라인 함수에 대한 이야기가 나온다.
무분별한 사용을 하지말라는 이야기이다.
그럼 무분별한 사용이란 무엇일까?
테스트를 통해 해답을 찾아 보자. 주의할 것은 테스트환경은 VC6과 VC.NET 2003이라는 것이다. 그러므로 여기서 해답이라는 것은 이 환경에서의 해답이 되겠다.
테스트를 통해 알아낸 사항은 비교적 단순하다.
결과가 무슨 이야기인가 하면..
컴파일러 기술이 발전해서 이제는 inline으로 명시되지 않은 곳이라도 컴파일러가 적당히 inline을 해주고 헤더화일에 정의되어 있다고 해서 무조건 inline해주지 않는다는 것이다.
컴파일러가 최적화를 위해 더 좋은 방식을 구현하겠다는데, 프로그래머가 inline이라는 키워드로 그러한 최적화를 방해하는 것이 안 좋다는 것이다.
참고로 대부분의 경우 최적화 옵션에서fast speed보다 small size 옵션이 보다 더 좋은 결과를 준다는 것은 알고 계시지요?
얼핏 생각하면 코드가 짧은 함수들을 모두 inline으로 처리하는 것이 함수 오버헤드를 줄이기 때문에 빨라 질거라 생각할 수 있지만,
멀티 스레드 환경의 운영체제에서는 수행되는 기계어 명령어 숫자만 줄인다고 해서 꼭 속도가 빨라지는 것은 아니다.
각 프로세스 마다 가상메모리를 가지고 여러 프로세스가 동시에 수행되기 때문에 각 가상 메모리들이 하드 디스크와 주 메모리 사이에서 페이징이 되서 왔다갔다 하게 되는데, 여기서 코드의 사이즈도 상당히 중요하게 된다.
예를 들어서 어떤 함수가 엄청 자주 호출되는데
그 함수에서 호출되는 함수들이 모두 inline 되서 프로그램 크기가 커지는 바람에 가상 메모리의 블락 사이즈보다 커지게 되면 정말 최악의 경우 함수 호출시마다 하드디스크를 긁을 수도 있게 되기 때문이다.
무분별한 사용을 하지말라는 이야기이다.
그럼 무분별한 사용이란 무엇일까?
테스트를 통해 해답을 찾아 보자. 주의할 것은 테스트환경은 VC6과 VC.NET 2003이라는 것이다. 그러므로 여기서 해답이라는 것은 이 환경에서의 해답이 되겠다.
테스트를 통해 알아낸 사항은 비교적 단순하다.
- 코드가 간단하다(라인 2줄이내의 간단한 코드)면 인라인으로 만드는 것이 좋다. (대부분 알고 있는 사항이다)
- 그렇지만 inline함수로 구현하더라도 inline이라는 키워드를 사용하지 않는 것이 좋다 (컴파일러 최적화 옵션을 다른 식으로 만지지 않는다면..말이다)
결과가 무슨 이야기인가 하면..
컴파일러 기술이 발전해서 이제는 inline으로 명시되지 않은 곳이라도 컴파일러가 적당히 inline을 해주고 헤더화일에 정의되어 있다고 해서 무조건 inline해주지 않는다는 것이다.
컴파일러가 최적화를 위해 더 좋은 방식을 구현하겠다는데, 프로그래머가 inline이라는 키워드로 그러한 최적화를 방해하는 것이 안 좋다는 것이다.
참고로 대부분의 경우 최적화 옵션에서fast speed보다 small size 옵션이 보다 더 좋은 결과를 준다는 것은 알고 계시지요?
얼핏 생각하면 코드가 짧은 함수들을 모두 inline으로 처리하는 것이 함수 오버헤드를 줄이기 때문에 빨라 질거라 생각할 수 있지만,
멀티 스레드 환경의 운영체제에서는 수행되는 기계어 명령어 숫자만 줄인다고 해서 꼭 속도가 빨라지는 것은 아니다.
각 프로세스 마다 가상메모리를 가지고 여러 프로세스가 동시에 수행되기 때문에 각 가상 메모리들이 하드 디스크와 주 메모리 사이에서 페이징이 되서 왔다갔다 하게 되는데, 여기서 코드의 사이즈도 상당히 중요하게 된다.
예를 들어서 어떤 함수가 엄청 자주 호출되는데
그 함수에서 호출되는 함수들이 모두 inline 되서 프로그램 크기가 커지는 바람에 가상 메모리의 블락 사이즈보다 커지게 되면 정말 최악의 경우 함수 호출시마다 하드디스크를 긁을 수도 있게 되기 때문이다.
댓글
댓글 쓰기