제로 오버헤드 원리
Zero-overhead principle
개요
C++의 저자인 비야네 스트롭스트룹이 제안한 원리로, D&E 라고 알려진 'Design and Evolution of C++' 책에서 소개되었다.
From: The C++ Programming Language
비야네 스트롭스트룹은 C++의 개념과 설계 목적을 소개할 때 두 가지 원리에 주목해야 한다면서, 두 번째 원리로 제로 오버헤드 원리를 소개한다.1
쓰지 않을 것에 낭비하지 말자. 프로그래머가 직접 수작업으로 적절한 코드를 작성해서 언어 특성이나 기본 추상화를 흉내 내거나 심지어 약간이라도 나은 성능을 보일 수 있다면 누군가는 그렇게 할 것이고, 많은 사람이 그것을 흉내 낼 것이다. 그러므로 언어 특성과 기본 추상화는 동등한 대안에 비교할 때 하나의 바이트나 하나의 프로세서 사이클이라도 낭비하지 않게 설계돼야 한다. 이것은 제로 오버헤드zero-overhead 원리라고 알려져 있다. 2
From: cppreference.com
The zero-overhead principle is a C++ design principle that states:
- You don't pay for what you don't use.
- What you do use is just as efficient as what you could reasonably write by hand.
In general, this means that no feature should be added to C++ that would impose any overhead, whether in time or space, greater than a programmer would introduce without using the feature.
The only two features in the language that do not follow the zero-overhead principle are runtime type identification and exceptions, and are why most compilers include a switch to turn them off.
제로 오버헤드 원칙은 C++의 설계 원칙이며, 내용은 다음과 같습니다.
- 사용하지 않는 것에 대해서는 비용을 지불하지 않는다.
- 실제로 사용하는 것이 있다면, 수작업으로 코드를 작성한 것 만큼 효율적이어야 한다.
일반적으로 이 원칙은 어떤 기능을 프로그래머가 직접 코딩했을 때보다 더 많은 시간적 공간적인 오버헤드가 있는 기능은 C++ 언어에 추가해서는 안 된다는 의미입니다.
언어에서 제로 오버헤드 원칙을 따르지 않는 유일한 두 가지 기능은 '런타임 타입 식별'과 '예외'이며, 이로 인해 대부분의 컴파일러에는 이걸 끄는 스위치가 포함되어 있습니다.
참고문헌
- The C++ Programming Language 한국어판 [4판] / 비야네 스트롭스트룹 저 / 박지유 역 / 에이콘출판사 / 발행 2016년 1월 4일 / 원제: The C++ Programming Language Fourth Edition
- Zero-overhead principle (cppreference.com)