0이 아닌 빈 C 클래스 크기 뒤에 숨은 수수께끼
C에서는 빈 클래스가 메모리를 차지하지 않는다는 개념이 보일 수 있습니다. 직관적이다. 그러나 이 가정은 멤버가 없는 클래스라도 0이 아닌 크기를 나타내는 특이한 동작으로 인해 문제가 됩니다. 이렇게 명백한 역설이 존재하는 이유는 무엇입니까?
알고 보니 C 표준에서는 객체와 해당 클래스의 크기가 0인 것을 명시적으로 금지하고 있습니다. 이 규정은 잠재적으로 동일한 메모리 공간을 공유하는 고유한 개체를 구별해야 하는 본질적인 요구 사항에서 비롯됩니다.
표준은 콘텐츠에 관계없이 모든 클래스의 최소 크기가 1이어야 함을 규정하여 이러한 구별을 보장합니다. 이렇게 하면 서로 다른 두 개체가 동일한 메모리 주소를 갖는 것을 방지할 수 있습니다. 이러한 조건은 예측할 수 없고 바람직하지 않은 동작으로 이어질 수 있기 때문입니다.
따라서 클래스에 사용자 정의 데이터 멤버가 없는 경우에도 본질적으로 구현 세부 정보가 포함됩니다. 가상 함수 테이블 및 포인터 멤버와 같은. 이러한 필수 구성 요소는 비록 사용자에게는 보이지 않지만 클래스 크기에 영향을 미치므로 빈 클래스라도 0이 아닌 양의 메모리를 차지하게 됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3