>백엔드 개발 >C++ >C에서 빈 클래스의 크기가 0바이트가 아닌 1바이트인 이유는 무엇입니까?

C에서 빈 클래스의 크기가 0바이트가 아닌 1바이트인 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-14 19:12:12167검색

Why Do Empty Classes in C   Have a Size of 1 Byte, Not 0 Bytes?

빈 클래스 객체의 크기 이해

C에서는 비어 있는 것처럼 보이는 클래스도 크기가 0이 아닙니다. 0바이트라고 가정할 수도 있지만 그렇지 않습니다. 이 질문은 이러한 동작의 원인을 자세히 설명합니다.

이를 설명하려면 다음 프로그램을 고려하세요.

#include <iostream>
using namespace std;

class Empty {};

int main()
{
    Empty e;
    cerr << sizeof(e) << endl;
    return 0;
}

이 프로그램을 컴파일하면 다양한 컴파일러(예: Visual C)의 ​​출력이 및 Cygwin-g)는 일관되게 1바이트입니다. 객체에 데이터 멤버가 없기 때문에 이는 예상치 못한 것처럼 보일 수 있습니다.

왜 1바이트인가요?

컴파일러는 빈 클래스 객체에 1바이트 크기를 할당하여 다음을 보장합니다. 서로 다른 개체에는 고유한 주소가 있습니다. 이러한 구별은 적절한 메모리 관리와 앨리어싱 문제 방지에 매우 중요합니다.

왜 4바이트(머신 워드)가 아닌가?

객체의 크기가 정렬될 것이라고 예상할 수도 있습니다. 기계어 크기(32 또는 64비트)를 사용하지만 그렇지 않습니다. 정렬할 데이터 멤버가 없기 때문에 빈 클래스에는 정렬 문제가 관련이 없습니다. 결과적으로 컴파일러는 가능한 최소 크기인 1바이트를 할당하여 공간을 최적화합니다.

0이 아닌 크기 조정

0바이트 크기는 빈 클래스는 동일한 메모리 위치를 차지할 수 있으므로 클래스를 구별하는 것이 불가능합니다. 이러한 모호함으로 인해 프로그램에서 정의되지 않은 동작이 발생할 수 있습니다. 따라서 0이 아닌 크기(이 경우 1바이트)는 고유한 주소를 보장하고 프로그램 무결성을 유지합니다.

위 내용은 C에서 빈 클래스의 크기가 0바이트가 아닌 1바이트인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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