>백엔드 개발 >C++ >짧은 정수 3개가 포함된 C 구조의 크기는 6바이트인데, 정수가 추가된 유사한 구조의 크기는 12바이트인 이유는 무엇입니까?

짧은 정수 3개가 포함된 C 구조의 크기는 6바이트인데, 정수가 추가된 유사한 구조의 크기는 12바이트인 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 13:53:02660검색

 Why Does a C Structure with 3 Short Integers Have a Size of 6 Bytes, But a Similar Structure with an Integer Added Has a Size of 12 Bytes?

C 구조의 메모리 정렬

컴퓨팅에서 메모리 정렬은 메모리에 데이터를 저장할 수 있는 주소에 대한 제한을 의미합니다. . 코드 성능을 최적화하고 예기치 않은 동작을 방지하려면 메모리 정렬을 이해하는 것이 중요합니다.

문제 설명:

귀하께서는 일반적으로 메모리 정렬이 이루어지는 32비트 시스템에서 작업하고 있습니다. 4바이트로 설정합니다. 다음 구조체를 고려하십시오.

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

구조체에는 3개의 2바이트 필드가 포함되어 있지만 sizeof 연산자를 사용하면 예상되는 8바이트 대신 6바이트가 반환됩니다. 반대로 다음 구조체:

<code class="c">typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;</code>

필드 수가 증가하고 패딩 가능성이 있으므로 예상대로 12바이트 크기를 반환합니다. 결과 크기에 차이가 있는 이유는 무엇입니까?

설명:

대부분의 시스템에서 데이터 유형은 크기보다 크지 않은 경계에 정렬됩니다. 이 경우 short는 2바이트, int는 4바이트입니다.

  • 첫 번째 구조체:

    • 모든 멤버가 2이므로 바이트이면 구조체가 2바이트 경계로 정렬됩니다.
    • 멤버 사이에 패딩이 삽입되지 않아 총 크기가 6바이트가 됩니다.
  • 두 번째 구조체:

    • 4바이트 int가 존재하려면 구조체가 4바이트 경계에 정렬되어야 합니다.
    • 2바이트 패딩은 올바른 정렬을 위해 v3와 i 사이에 삽입하여 전체 크기를 12바이트로 늘렸습니다.

위 내용은 짧은 정수 3개가 포함된 C 구조의 크기는 6바이트인데, 정수가 추가된 유사한 구조의 크기는 12바이트인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.