C에서 모든 포인터의 크기가 동일합니까?
이 질문은 논쟁의 대상이었으며 일부 소스에서는 모든 포인터가 같은 크기를 갖는 반면 다른 사람들은 포인터의 크기가 다양할 수 있다고 주장합니다.
C 표준에 따르면
- void가 다음과 같은 크기를 갖는다는 것이 명시적으로 보장됩니다. char
- cv 정규 포인터(예: T const, T 휘발성, T const 휘발성)은 T
동일한 기본 유형을 가진 열거형 유형에 대한 포인터의 크기는 동일합니다-
표준에서는 모든 포인터의 크기가 동일하다고 명시적으로 명시하지 않지만 실제로는 모든 클래스 유형에 대한 포인터가 있다는 것이 일반적입니다. , 함수 포인터, 데이터 멤버 포인터 및 함수 멤버 포인터의 크기는 동일합니다.
그러나 컴파일러는 기술적으로 트릭을 수행할 수 있으므로 이 가정이 100% 보장되지는 않습니다. 예를 들어 특정 접두사로 시작하는 클래스에 대해 더 긴 포인터를 만들거나 해당 클래스에 대해 가비지 수집을 구현하기로 결정한 경우에 사용할 수 있습니다.
실제 시나리오에서 컴파일러가 이러한 자유를 활용할 가능성은 거의 없습니다. 결과적으로 개발자는 일반적으로 위에서 언급한 다른 클래스 유형과 다른 유형에 대한 포인터가 동일한 크기를 가질 것이라고 가정할 수 있습니다. 추가 보증을 제공하기 위해 static_assert 문을 구현하여 잠재적인 위반을 표시할 수 있습니다.
그러나 근거리 포인터와 원거리 포인터가 있는 분할된 아키텍처에서는 이러한 유형의 포인터가 동일한 크기를 갖지 않을 수 있습니다. 이는 균일한 크기를 갖는 포인터의 일반적인 규칙에 대한 예외입니다.
위 내용은 C에서 포인터의 크기는 항상 같은가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!