집계 및 공용 구조체
배열, 구조체 및 공용 구조체 같은 기타 형식의 경우 집계 및 공용 구조체 저장소와 데이터 검색을 일관되게 유지하기 위해 더 엄격한 맞춤 요구 사항을 충족해야 합니다.다음은 배열, 구조체 및 공용 구조체에 대한 정의입니다.
배열
인접한 데이터 개체의 순서가 지정된 그룹이 들어 있습니다.각 개체를 요소라고 합니다.배열의 모든 요소는 크기와 데이터 형식이 동일합니다.구조체
데이터 개체의 순서가 지정된 그룹이 들어 있습니다.배열의 요소와 달리 구조체의 데이터 개체는 데이터 형식과 크기가 서로 다를 수 있습니다.구조체의 각 데이터 개체를 멤버라고 합니다.공용 구조체
명명된 멤버 집합 하나가 저장된 개체입니다.명명된 집합의 멤버는 임의의 형식일 수 있습니다.공용 구조체에 할당된 저장소의 크기는 해당 공용 구조체의 가장 큰 멤버에 필요한 저장소와 맞춤에 필요한 안쪽 여백을 더한 크기에 해당합니다.
다음 표에는 공용 구조체와 구조체의 스칼라 멤버에 권장되는 맞춤이 나와 있습니다.
스칼라 형식 |
C 데이터 형식 |
필요한 맞춤 |
INT8 |
char |
Byte |
UINT8 |
unsigned char |
Byte |
INT16 |
short |
Word |
UINT16 |
unsigned short |
Word |
INT32 |
int, long |
Doubleword |
UINT32 |
unsigned int, unsigned long |
Doubleword |
INT64 |
__int64 |
Quadword |
UINT64 |
unsigned __int64 |
Quadword |
FP32(단정밀도) |
float |
Doubleword |
FP64(배정밀도) |
double |
Quadword |
POINTER |
* |
Quadword |
__m64 |
struct __m64 |
Quadword |
__m128 |
struct __m128 |
Octaword |
여기에 적용되는 집계 맞춤 규칙은 다음과 같습니다.
배열 맞춤은 배열 요소 중 하나의 맞춤과 동일합니다.
구조체나 공용 구조체의 시작 부분 맞춤은 개별 멤버의 최대 맞춤입니다.구조체나 공용 구조체 내의 각 멤버는 위 표에서 정의한 대로 적절한 맞춤에 따라 배치해야 합니다. 이 경우 이전 멤버에 따라 암시적 내부 안쪽 여백이 필요할 수도 있습니다.
구조체 크기는 해당 맞춤의 배수여야 합니다. 이 경우 마지막 멤버 뒤에 안쪽 여백이 필요할 수도 있습니다.구조체와 공용 구조체는 배열에 그룹화될 수 있으므로 구조체나 공용 구조체의 각 배열 요소는 이전에 결정된 적절한 맞춤에 따라 시작하고 끝나야 합니다.
위의 규칙을 준수하는 한 맞춤 요구 사항보다 큰 방식으로 데이터를 맞출 수 있습니다.
크기 문제로 인해 개별 컴파일러에서 구조체의 압축을 조정할 수도 있습니다.예를 들어, /Zp(구조체 멤버 맞춤)를 사용하여 구조체의 압축을 조정할 수 있습니다.