2012-05-14 2 views
1

가능한 중복 :
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
약는 sizeof() 클래스

출력이 8 이유?
아니요 sizeof(int)+sizeof(char) = 5?

class CBase 
{ 
    int a; 
    char p; 
}; 

int main() { 

    cout<<"sizeof(CBase)="<<sizeof(CBase)<<endl; 
    getchar(); 
} ///:~ 
+2

:

는 직전에 그것을 실행에 응용 프로그램이 환경 변수를 설정 (애플 리케이션은 VMX를 사용할 수 없다는 단점이있다) 런타임이 주위에 방법이이 정렬을 수행하지 않으려면 [구조 패딩] (http://en.wikipedia.org/wiki/Sizeof#Structure_padding) – iammilind

+0

자세한 설명은 여기에서 -> http://en.wikipedia.org/wiki/Data_structure_alignment – rt2800

답변

5

성능 향상을 위해 메모리는 일반적으로 컴파일러에 의해 정렬됩니다. 그래서 클래스 나 구조체는 그 부분의 합보다 메모리에서 더 많은 공간을 차지할 수 있습니다.

+3

특히이 경우 : 생성하는 경우 CBase의 배열. 다음의 요소는 전의 바이트가 종료 한 후 다음의 바이트로 시작된다 따라서 배열의 모든 요소에서 'a'가 4 정렬되도록하려면 구현시 CBase를 4의 배수로 채 웁니다. 구조체의 크기는 항상 정렬 요구 사항의 배수입니다. –

1

컴파일러/런타임이 8 바이트 경계로 정렬 된 것처럼 보입니다. 컴파일러 또는 런타임 스위치로이를 변경할 수 있습니다. 예를 들어, AIX에서 C++ 메모리 할당은 16 바이트로 정렬되어 더 많은 메모리를 사용할 수 있습니다.

export LIBCPP_NOVMX=1 
+0

컴파일러는 8 바이트로 정렬 할 필요가 없으며'int'를 4 바이트로 정렬하려고 할 수 있습니다. –