>백엔드 개발 >C++ >C에서 포인터의 크기는 항상 같은가요?

C에서 포인터의 크기는 항상 같은가요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-28 22:42:02652검색

 Do Pointers Always Have the Same Size in C  ?

C에서 모든 포인터의 크기가 동일합니까?

이 질문은 논쟁의 대상이었으며 일부 소스에서는 모든 포인터가 같은 크기를 갖는 반면 다른 사람들은 포인터의 크기가 다양할 수 있다고 주장합니다.

C 표준에 따르면

  • void가 다음과 같은 크기를 갖는다는 것이 명시적으로 보장됩니다. char
  • cv 정규 포인터(예: T const, T 휘발성, T const 휘발성)은 T
  • 동일한 기본 유형을 가진 열거형 유형에 대한 포인터의 크기는 동일합니다
표준에서는 모든 포인터의 크기가 동일하다고 명시적으로 명시하지 않지만 실제로는 모든 클래스 유형에 대한 포인터가 있다는 것이 일반적입니다. , 함수 포인터, 데이터 멤버 포인터 및 함수 멤버 포인터의 크기는 동일합니다.

그러나 컴파일러는 기술적으로 트릭을 수행할 수 있으므로 이 가정이 100% 보장되지는 않습니다. 예를 들어 특정 접두사로 시작하는 클래스에 대해 더 긴 포인터를 만들거나 해당 클래스에 대해 가비지 수집을 구현하기로 결정한 경우에 사용할 수 있습니다.

실제 시나리오에서 컴파일러가 이러한 자유를 활용할 가능성은 거의 없습니다. 결과적으로 개발자는 일반적으로 위에서 언급한 다른 클래스 유형과 다른 유형에 대한 포인터가 동일한 크기를 가질 것이라고 가정할 수 있습니다. 추가 보증을 제공하기 위해 static_assert 문을 구현하여 잠재적인 위반을 표시할 수 있습니다.

그러나 근거리 포인터와 원거리 포인터가 있는 분할된 아키텍처에서는 이러한 유형의 포인터가 동일한 크기를 갖지 않을 수 있습니다. 이는 균일한 크기를 갖는 포인터의 일반적인 규칙에 대한 예외입니다.

위 내용은 C에서 포인터의 크기는 항상 같은가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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