2013-03-16 2 views
3

나는 PIMPL 관용구를 배우고있다. 장점 중 하나는 바이너리 호환성입니다. 나는 바이너리 호환성의 장점이 무엇인지 궁금하다. 감사!왜 바이너리 호환성이 있습니까?

+0

클레임에 대한 참조를 제공합니다. –

답변

3

Fragile Binary Interface Problem을 피할 수 있습니다. 다음과 같이 바뀝니다.

  1. 프로그램에서 라이브러리를 사용합니다.

  2. 사용자 업그레이드 라이브러리. 업그레이드는 라이브러리의 바이너리 인터페이스에서 변경됩니다.

  3. 프로그램은 이전 바이너리 인터페이스로 작성 되었기 때문에 프로그램을 다시 컴파일해야만 작동합니다. PIMPL 관용구의 장점

하나는 개인 클래스의 인터페이스에, 당신은 (사실은 개인 인터페이스로 일반적으로 클래스의 공용 인터페이스의 일부가 될 것입니다 일을 이동할 수 있다는 것입니다). 이진 호환성을 손상시키지 않으면 서 개인 인터페이스를 변경할 수 있습니다.

0

PIMPL 관용구의 장점은 바이너리 호환성과 크게 다르지 않지만 클래스의 구현이나 레이아웃을 변경하는 경우 재 컴파일해야 할 필요성이 줄어 듭니다. 예를 들어 클래스에 새 데이터 멤버를 추가하면 클래스의 레이아웃이 변경되고 클래스의 모든 클라이언트를 다시 컴파일해야하지만 PIMPL 관용구를 사용하는 경우에는 그렇지 않습니다.

이진 호환성은 여러 컴파일러 (및 컴파일러 버전)와 호환되는 것과 관련이 있으며 C++에서이를 수행하는 유일한 방법은 클라이언트에 노출되지 않는 클래스에 의해 구현되는 인터페이스 (추상 클래스)입니다. 이는 추상 클래스의 vtable 레이아웃이 모든 컴파일러에 의해 동일하게 구현되기 때문입니다. DirectX API와 같은 많은 API는 이러한 방식으로 노출되므로 모든 컴파일러에서 사용할 수 있습니다.

+0

다시 컴파일 할 필요가없는 이유는 바이너리 호환성을 보존했기 때문입니다. –