#pragma pack (n)
을 사용하여 데이터 멤버를 정렬하려고합니다. 예를 들어 다음을 보자 #pragma pack (16) 및 #pragma pack (8)과 항상 동일한 효과가 나타 납니까?
#include <iostream>
using namespace std;
#pragma pack(8) // or (16)
struct A
{
int a;
char b;
char c;
char d;
char e;
char f;
double g;
};
int main()
{
cout << sizeof(A) << endl;
return 0;
}
이 모두
#pragma pack(8)
및
#pragma pack(16)
에 대한
24
을 인쇄합니다. 다음과 같이 나는 나의 이해의 데이터 정렬과
n=8
에 대한 결과를 이해할 수 :
Bytes: |1 2 3 4|5|6|7|8|9|10 11 12 13 14 15 16|17 18 19 20 21 22 23 24|
Data: |a |b|c|d|e|f|padding |g |
을하지만 결과는 n=16
여전히 24
왜 나는 이해할 수 없다. 다른 예제를 시도해 보았는데, 모두 같은 결과가 n=8
및 n=16
인 것으로 보입니다. 왜 누군가가 설명 할 수 있습니까? 데이터 멤버가 n=8
과 같은 방법으로 정렬되어 있습니까?
p .: VS2010에서 Win-x64로 테스트되었습니다. 페이지에서
감사합니다. 지금은 의미가 있습니다. *'각 멤버에 대해 참조 할 수있는 위치는 멤버의 최적 정렬과 팩 값 사이의 최소 정렬입니다. *? – herohuyongtao
'pragma pack'은 컴파일러 확장입니다. 유일한 참고 자료는 링크 된 페이지 일 것입니다. 제가 인용 한 부분은 본질적으로 그것을 말합니다. –