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

`sizeof(myStruct2)`는 12바이트를 반환하는 반면 `sizeof(myStruct1)`는 6바이트를 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-26 10:01:03
원래의
397명이 탐색했습니다.

Why Does `sizeof(myStruct2)` Return 12 Bytes While `sizeof(myStruct1)` Returns 6 Bytes?

C 구조체의 메모리 정렬

C의 구조체를 다룰 때 메모리 정렬은 메모리 사용량과 성능을 최적화하는 데 중요한 역할을 합니다. 다음 두 구조체 사이의 메모리 정렬 차이로 인해 의아해하는 경우:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct1;

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct2;</code>
로그인 후 복사

여기서 myStruct1과 myStruct2는 모두 6바이트의 동일한 결합 데이터 크기를 갖지만 myStruct2는 다음을 사용하여 12바이트의 크기를 보고합니다. sizeof()의 답은 메모리 정렬에 있습니다.

대부분의 32비트 시스템에서 정렬 경계는 일반적으로 4바이트입니다. 이는 구조가 가장 가까운 4바이트의 배수로 정렬됨을 의미합니다. myStruct1에서는 각 멤버가 2바이트이므로 멤버 사이에 패딩이 삽입되지 않으며 실제 크기는 6바이트로 유지됩니다.

그러나 myStruct2에서 4바이트 정수(int)를 추가하려면 4바이트 정렬 경계. 원본 구조체의 초기 6바이트 데이터가 4바이트 경계에 정렬되지 않으므로 v3과 i 사이에 2바이트의 패딩이 삽입됩니다. 이 패딩은 i가 4바이트 경계에서 시작하도록 보장하므로 myStruct2의 총 크기는 12바이트가 됩니다.

대부분의 경우 구조는 가장 큰 멤버의 경계에만 정렬된다는 점을 기억하세요. 이 경우 myStruct2의 int 멤버는 정렬 경계를 결정하며, 이는 두 구조체 간의 메모리 정렬 차이를 설명합니다.

위 내용은 `sizeof(myStruct2)`는 12바이트를 반환하는 반면 `sizeof(myStruct1)`는 6바이트를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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