생성자 기호의 이중 방출
GCC 또는 clang으로 컴파일된 C 코드에서 생성자 정의는 정적 라이브러리에 두 번 나타나는 경우가 많습니다. 이 동작은 중복 이유와 그 의미에 대한 의문을 제기합니다.
이중 방출의 원인
Itanium C ABI에 따르면 생성자 잘못된 이름은 접두사로 구성됩니다. , 중첩 클래스 및 함수 이름, 최종 중첩 태그 및 매개변수 정보입니다. 그러나 가상 기본 클래스가 없는 클래스의 생성자의 경우 GCC는 "완전한 개체 생성자"(C1)와 "기본 개체 생성자"(C2)라는 두 가지 변형을 추가로 내보냅니다.
이 이중 방출은 ABI의 다음 지원에서 비롯됩니다. 다형성. 클래스에 가상 기본 클래스가 없더라도 ABI는 다형성 처리를 용이하게 하기 위해 이 이중 방출을 요구합니다.
이중 방출의 의미
두 개의 생성자 기호를 방출함에도 불구하고, GCC는 컴파일 최적화 중에 기호를 동일한 코드로 별칭을 지정합니다. 이는 다중 정의 오류가 없음을 의미합니다.
또한 두 생성자 기호에 대해 생성된 어셈블리 코드는 동일한 기본 생성자 논리를 호출한다는 것을 보여줍니다. 어떤 기호가 호출되는지에 관계없이 완전한 객체 생성자가 호출됩니다. 이 동작은 꼭 필요하지 않은 경우에도 C2 기호가 다형성에 대한 ABI 지원의 흔적임을 의미합니다.
위 내용은 C 생성자 기호가 정적 라이브러리에 두 번 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!