빈 클래스 객체의 크기 이해
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!