> 백엔드 개발 > C++ > 본문

데이터 정렬은 C 클래스의 크기에 어떤 영향을 줍니까?

Susan Sarandon
풀어 주다: 2024-10-25 00:06:30
원래의
900명이 탐색했습니다.

How Does Data Alignment Affect the Size of C   Classes?

C의 클래스 크기 결정 이해

컴파일 시 C 클래스의 크기를 결정하려면 데이터 정렬 원칙을 이해해야 합니다. 클래스 내의 각 멤버에는 크기 및 정렬 요구 사항이 있습니다.

크기 및 정렬 계산 프로세스

컴파일하는 동안 컴파일러는 실행 크기(S)를 0으로 초기화하고 정렬 요구 사항(A)을 1(바이트)로. 수업의 각 구성원에 대해:

  1. 정렬 요구 사항(a)이 확인됩니다. S가 a의 배수가 아닌 경우 S는 가장 가까운 배수로 조정됩니다. 이에 따라 멤버의 오프셋이 결정됩니다.
  2. A와 a의 최소 공배수(LCM)가 계산되고 A가 LCM으로 업데이트됩니다.
  3. 멤버의 공백이 추가됩니다. to S.

모든 회원을 처리한 후 최종 클래스 규모가 결정됩니다. 전체 클래스(A)의 정렬 요구 사항의 배수가 되도록 조정된 S 값입니다.

정렬 고려 사항

  • 배열: 크기는 요소 수에 요소 크기를 곱한 값이며 정렬 요구 사항은 요소와 동일합니다.
  • 구조체: 크기 및 정렬 요구 사항은 재귀적으로 결정됩니다.
  • Unions: 크기는 요소의 크기입니다. 모든 구성원 정렬의 LCM으로 반올림된 가장 큰 구성원입니다.

제공된 코드는 이 프로세스를 보여줍니다.

<code class="cpp">#include <xmmintrin.h>

class TestClass1 {
  __m128i vect;
}; // Size: 16 bytes

class TestClass2 {
  char buf[8];
  char buf2[8];
}; // Size: 16 bytes

class TestClass3 {
  char buf[8];
  __m128i vect;
  char buf2[8];
}; // Size: 48 bytes

class TestClass4 {
  char buf[8];
  char buf2[8];
  __m128i vect;
}; // Size: 32 bytes</code>
로그인 후 복사

TestClass3은 TestClass1 및 TestClass2와 동일한 멤버를 갖고 있음에도 불구하고 16바이트 경계를 강제하는 __m128i의 정렬 요구 사항으로 인해 더 큽니다(48바이트). 데이터 멤버 순서가 다른 TestClass4는 정렬과 크기(32바이트)가 다릅니다.

위 내용은 데이터 정렬은 C 클래스의 크기에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿