pragma pack(3)이라 언급하면, 3바이트 단위로 레지스터를 정렬하지 않나요?
글쓴이: mydream / 작성시간: 토, 2015/12/26 - 2:35오후
pragma pack( n) 이라는 전처리기 명령어가 실행되면 레지스터 정렬이 n바이트 단위로 이루어지는 것으로 압니다. 그렇다면 다음의 Something이라는 구조체를 3바이트 단위로 정렬하면, 그 데이터의 크기는 얼마가 될까요?
#include <iostream> using namespace std; #pragma pack(3) struct Something { int num; char ch1; }; int main() { cout<<sizeof(Something)<<endl; return 0; }
결과는 8바이트가 나옵니다. 그런데 3바이트 단위로 레지스터를 정렬하기 때문에 6이 출력되어야 하는 것 아닌가요? 그러니까
| 1 | 2 | 3 | 4 | 5 | 6 |
1~4까지는 num, 5는 ch1이 차지하면 마지막의 6이 남는 것으로 저는 이해를 했는데요. 왜냐하면 3바이트 단위로 데이터가 잘릴 것이라 기대했기 때문입니다. 저 전처리에 입력한 숫자가 3이기 때문에요. 왜 8이 출력되는 것인가요?
Forums:
2, 4, 8 만 가능하데는군요.
pragma pack(n)에서 n에 가능한 값은 2, 4, 8이라 하는군요. 2를 언급하고 해보니 6이라 출력됩니다.
댓글 달기