저장소 및 구조체의 맞춤Storage and Alignment of Structures

Microsoft 전용Microsoft Specific

구조체 멤버는 선언된 순서에 따라 순차적으로 저장됩니다. 즉, 첫 멤버가 가장 낮은 메모리 주소를 갖고 마지막 멤버가 가장 높은 주소를 갖습니다.Structure members are stored sequentially in the order in which they are declared: the first member has the lowest memory address and the last member the highest.

모든 데이터 개체에는 alignment-requirement가 있습니다.Every data object has an alignment-requirement. 구조체의 경우 요구 사항이 해당 멤버 중 가장 큽니다.For structures, the requirement is the largest of its members. 다음과 같이 되도록 모든 개체에 오프셋이 할당됩니다.Every object is allocated an offset so that

offset % alignment-requirement == 0offset % alignment-requirement == 0

정수 계열 형식의 크기가 같으며 다음 비트 필드가 비트 필드의 일반 할당 요구 사항에 따라 적용되는 경계를 벗어나지 않고 현재 할당 단위에 맞는 경우 인접 비트 필드는 동일한 1, 2 또는 4바이트 할당 단위로 압축됩니다.Adjacent bit fields are packed into the same 1-, 2-, or 4-byte allocation unit if the integral types are the same size and if the next bit field fits into the current allocation unit without crossing the boundary imposed by the common alignment requirements of the bit fields.

공간을 아끼거나 기존 데이터 구조를 따르려면 구조체를 다소 조밀하게 저장해야 할 수 있습니다.To conserve space or to conform to existing data structures, you may want to store structures more or less compactly. /Zp[n] 컴파일러 옵션 및 #pragma pack은 구조체 데이터가 메모리에 "압축"되는 방법을 제어합니다.The /Zp[n] compiler option and the #pragma pack control how structure data is "packed" into memory. /Zp[n] 옵션을 사용하면(n: 1, 2, 4, 8 또는 16) 첫 번째 이후의 각 구조체 멤버가 바이트 경계(필드의 맞춤 요구 사항이나 압축 크기(n) 중 더 작은 값)에 저장됩니다.When you use the /Zp[n] option, where n is 1, 2, 4, 8, or 16, each structure member after the first is stored on byte boundaries that are either the alignment requirement of the field or the packing size (n), whichever is smaller. 수식으로 표현된 바이트 경계는 다음과 같습니다.Expressed as a formula, the byte boundaries are the

min( n, sizeof( item ) )  

여기서 n은 /Zp[n] 옵션으로 표현되는 압축 크기이며 item은 구조체 멤버입니다.where n is the packing size expressed with the /Zp[n] option and item is the structure member. 기본 압축 크기는 /Zp8입니다.The default packing size is /Zp8.

pack pragma를 사용하여 특정 구조체에 대해 명령줄에서 지정한 압축 이외의 압축을 지정하려면 압축 크기가 1, 2, 4, 8 또는 16인 pack pragma를 구조체 앞에 제공하십시오.To use the pack pragma to specify packing other than the packing specified on the command line for a particular structure, give the pack pragma, where the packing size is 1, 2, 4, 8, or 16, before the structure. 명령줄에서 지정한 압축을 복구하려면 pack pragma를 인수 없이 지정하십시오.To reinstate the packing given on the command line, specify the pack pragma with no arguments.

Microsoft C 컴파일러의 경우 비트 필드의 기본 크기는 long입니다.Bit fields default to size long for the Microsoft C compiler. 구조체 멤버는 형식의 크기나 /Zp[n] 크기 중 더 작은 값에 맞춰집니다.Structure members are aligned on the size of the type or the /Zp[n] size, whichever is smaller. 기본 크기는 4입니다.The default size is 4.

Microsoft 전용 종료END Microsoft Specific

참고 항목See Also

구조체 선언Structure Declarations