구조체의 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/에서 읽을 수 있습니다. 데이터 구조_정렬.