>백엔드 개발 >C++ >C 생성자 기호가 정적 라이브러리에 두 번 나타나는 이유는 무엇입니까?

C 생성자 기호가 정적 라이브러리에 두 번 나타나는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-27 22:33:11817검색

Why Do C   Constructor Symbols Appear Twice in Static Libraries?

생성자 기호의 이중 방출

GCC 또는 clang으로 컴파일된 C 코드에서 생성자 정의는 정적 라이브러리에 두 번 나타나는 경우가 많습니다. 이 동작은 중복 이유와 그 의미에 대한 의문을 제기합니다.

이중 방출의 원인

Itanium C ABI에 따르면 생성자 잘못된 이름은 접두사로 구성됩니다. , 중첩 클래스 및 함수 이름, 최종 중첩 태그 및 매개변수 정보입니다. 그러나 가상 기본 클래스가 없는 클래스의 생성자의 경우 GCC는 "완전한 개체 생성자"(C1)와 "기본 개체 생성자"(C2)라는 두 가지 변형을 추가로 내보냅니다.

이 이중 방출은 ABI의 다음 지원에서 비롯됩니다. 다형성. 클래스에 가상 기본 클래스가 없더라도 ABI는 다형성 처리를 용이하게 하기 위해 이 이중 방출을 요구합니다.

이중 방출의 의미

두 개의 생성자 기호를 방출함에도 불구하고, GCC는 컴파일 최적화 중에 기호를 동일한 코드로 별칭을 지정합니다. 이는 다중 정의 오류가 없음을 의미합니다.

또한 두 생성자 기호에 대해 생성된 어셈블리 코드는 동일한 기본 생성자 논리를 호출한다는 것을 보여줍니다. 어떤 기호가 호출되는지에 관계없이 완전한 객체 생성자가 호출됩니다. 이 동작은 꼭 필요하지 않은 경우에도 C2 기호가 다형성에 대한 ABI 지원의 흔적임을 의미합니다.

위 내용은 C 생성자 기호가 정적 라이브러리에 두 번 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.