2014-12-23 5 views
1

유니온 구성원이 메모리 공간을 공유한다는 것을 알고 있으므로 다음 코드가 9 & 9를 출력 할 것으로 기대합니다. 그러나 12 & 9. 왜?C++ struct의 이상한 동작

union Sample_union { 
    int x; 
    char array [9]; 
}; 
int main(){ 
    Sample_union sample; 
    cout<<sizeof(sample)<<endl; 
    char test [9]; 
    cout<<sizeof(test)<<endl; 
} 

다른 컴파일러에서도 다음 코드를 테스트합니다.

+0

'struct','class' 및'union'의 데이터 멤버가 _padded_ 될 수 있기 때문에. –

답변

8

이것은 패딩 때문에 발생합니다.

유니온에 int이 포함되어있는 경우 컴파일러는이 경우 유니온 배열에서 int이 4 바이트 경계로 정렬되는지 확인하려고합니다.

char 다른 정렬 요구 사항이 없으므로 9 개의 문자 배열을 채울 필요가 없습니다.

예를 들어 g ++에서 double 멤버를 추가하면 유니언의 크기는 1630이됩니다 (double 정렬은 8 바이트이므로).