컴파일 중 C 클래스 크기 결정
클래스 크기 및 메모리 정렬 이해
C에서는 메모리 할당 및 액세스를 최적화하기 위해 컴파일 중에 클래스 크기가 정적으로 결정됩니다. 클래스 크기를 효과적으로 계산하기 위해 컴파일러는 데이터 멤버 크기 및 정렬 요구 사항을 비롯한 다양한 요소를 고려합니다.
데이터 멤버 정렬 및 크기 계산
일반 이전 데이터(POD) ) 결정적 크기를 갖는 데이터 멤버가 있는 클래스에는 일반적으로 다음 규칙이 적용됩니다.
- 각 데이터 멤버는 크기(s)와 정렬 요구 사항(a)을 갖습니다.
- 컴파일러의 초기 크기(S)는 0으로 설정되고 정렬(A)은 1바이트로 설정됩니다.
-
멤버는 순차적으로 처리됩니다.
- 정렬 요구 사항(a)을 확인하세요. . S를 a로 나눌 수 없는 경우 S를 증가시켜 멤버를 올바른 오프셋에 정렬합니다.
- A를 현재 A와 a의 최소 공배수로 업데이트합니다.
- S를 s로 증가시킵니다. 멤버를 수용합니다.
- 모든 멤버를 처리한 후 S가 A로 나누어지는지 확인합니다. 그렇지 않은 경우 그에 따라 S를 늘립니다.
- S의 최종 값은 클래스 크기를 나타냅니다.
추가 고려 사항
- 배열 : 크기는 요소 수에 요소 크기를 곱하여 계산됩니다. 정렬은 요소의 정렬 요구 사항입니다.
- 구조: 크기와 정렬은 동일한 규칙을 사용하여 재귀적으로 계산됩니다.
- Unions: 크기는 가장 큰 멤버의 크기와 이를 충족하는 패딩을 더한 값입니다. 모든 멤버 정렬의 최소 공배수입니다.
예: TestClass3
TestClass3의 경우 크기 계산은 다음과 같이 진행됩니다.
- buf[8]에는 정렬 1의 8바이트가 필요하므로 S는 8이 됩니다.
- __m128i vect에는 정렬 16의 16바이트가 필요합니다. S는 먼저 정렬을 위해 16으로 증가한 다음 vect를 수용하기 위해 32로 증가합니다.
- buf2[8]에는 정렬 1로 8바이트가 필요합니다. S는 24로 증가합니다.
- 24는 16으로 나눌 수 없으므로 S는 8에서 32로 증가합니다.
따라서 TestClass3의 크기는 32바이트입니다.
결론
이러한 정렬 및 크기 계산 규칙을 준수함으로써 컴파일러는 최적의 메모리 할당과 효율성을 보장합니다. C 클래스에 대한 데이터 액세스.
위 내용은 C 컴파일러는 컴파일 중에 클래스 크기를 어떻게 계산합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!