Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

구조체의 sizeof가 C/C++에서 각 멤버의 sizeof 합계와 같지 않은 이유는 무엇입니까?


구조체의 sizeof와 해당 구조의 각 멤버의 sizeof 합계의 차이는 바이트 패딩 및 정렬로 인한 것입니다. C/C++의 모든 데이터 유형에는 정렬 요구 사항이 있습니다. 프로세서는 아키텍처의 처리 단어 길이를 갖습니다. 32비트 머신에서 처리 워드 크기는 4바이트 또는 32비트입니다. 예를 들어 struct −

가 있는 경우

예시

#include <iostream>
using namespace std;
struct X
{
   char b[3];
   int c;
};
int main()
{
   char b[3];
   int c;
   int total = sizeof(b) + sizeof(c);
   cout << sizeof(X) << endl;
   cout << total;
}

출력

이것은 출력을 제공합니다 -

8
7

내 64 비트 컴퓨터에서. 왜 이런거야? 그 이유는 구조체에서 char 배열을 가져와 메모리에 넣지만 이제 크기가 4바이트인 int를 옆에 넣으면 정렬 규칙이 위배되기 때문입니다. 따라서 b 끝에 있는 추가 바이트는 건너뛰고 c는 4바이트 경계에서 시작합니다. 이로 인해 추가 크기가 발생합니다.

이 규칙에 대한 자세한 내용은 https://en.wikipedia.org/wiki/에서 읽을 수 있습니다. 데이터 구조_정렬.