2015-01-21 1 views
0

인라인 함수를 과도하게 사용하면 바이너리 업그레이드 가능성에 영향을 줄 수 있음을 알고 있습니다. 업그레이드 가능성이 중요한 경우에는이를 피하십시오. 그러나 인라인이 바이너리 호환성에 어떤 영향을 미칠 수 있는지 파악할 수 없습니다. 제발, 누군가 그걸 설명 할 수 있겠 어.인라인은 업그레이드 릴리스에 대한 바이너리 호환성을 제한 할 수있는 방법

+0

너무 모호합니다. 몇 가지 Google 검색 및 다른 스택을 사용하여 질문하십시오. 이것은 코딩 용입니다. –

+1

인라인 함수의 적절한 사용은 코딩과 관련이 있다고 생각합니다. – Aymen

+1

True. 나는 틀릴 수도있다. –

답변

3

함수, 변수 및 유형 (별칭 : 기호)을 선언 할 때 변수를 내 보낸 것으로 선언해야합니다. 서로 다른 컴파일러가 Visual Studio uses __declspec(dllexport) (그리고 내가 당신을 위해 너무 게으르다.) 동안 GCC uses various Visibility switches. 나는 clang이 GCC 의미론을 사용한다고 (또는 상대적으로 호환 가능하다), 다른 컴파일러의 내보내기 방법에 익숙하지 않다고 생각한다. 문자.

당신은 당신의 기능 인라인 경우 그것은 실제로 당신이 외부에서 호출 어떻게 다음 (당신이 내보낼 수있는 기호로 선언 된 경우, 나는 컴파일러의 버그가 될 것을 주장하는)를 인라인 도착하여 라이브러리? 함수에 대한 인라인 프로세스의 일부로 컴파일러는 더 이상 필요 없기 때문에 프롤로그 및 에필로그 지침을 제거하거나 다시 작성합니다 (예 : x86에 retn이 필요하지 않음 - 반환 값을 레지스터에 저장). 사용 예정).

라이브러리의 초기 버전에서 인라인으로 선언되었지만 실제로는 인라인되지 않은 일부 함수 (예 : 재귀 함수)를 사용했다고 가정합니다. 다른 사람이 함께 와서 라이브러리를 사용하기 시작합니다. 이후 버전에서는 코드를 재 작업하여 재귀를 제거합니다. 갑자기 컴파일러 수 있습니다 인라인 함수 및 옵트, 따라서 내보내기를 숨기기. 이제 기존 고객 (라이브러리를 사용하는 사람)은 기호가 누락되었습니다. 바이너리 호환성이 손상되었습니다.

+0

@inetnght : 좋은 예, 고마워. 따라서 인라인 함수를 많이 사용하면 업그레이드 가능성에 영향을 줄 가능성이 커집니다. 내게는 우리가 완전히 통제 할 수 없다는 것이 약간 위험한 것처럼 들린다. 필자는 컴파일러에 의해 효과적으로 인라인 될 수있는 기회를주기 위해 적절한 방식으로 인라인 함수를 작성할 수 있도록 최선을 다해 회피, 회귀 등을 피한다. 당신은 제 의견에 동의하십니까? – Aymen

+1

아니요. 나는 위험하다고 말하지 않을 것입니다 : 수출 통제 (수출업자에게 무언가를 수출하겠다고 말함) 및 적절한 단위/통합/수출 테스트를 실행하면 (예 : 수입품을 테스트하기 위해 특별히 다른 프로젝트를 생성하는 경우) 모든 빌드에서 자동으로 트리거되는 내보내기)를 사용하면 새 버전을 출시하기 전에 이러한 문제를 감지하여 바이너리 비 호환성으로 인한 문제를 완화하고 관리 할 수 ​​있습니다 (이 모든 작업을 완료하고 모든 기능을 올바르게 사용한다고 가정). – inetknght

+0

그렇다면 컴파일러의 결정에 따라 인라인으로 선언되었지만 어쨌든 (컴파일러의 결정에 따라) 인라인 된 다른 사람의 함수도 @inetknght의 예와 마찬가지로 바이너리 호환성을 손상시킬 수 있습니까? – Hydren