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