Data alignment ( #pragma pack )
Data Alignment ๋ 32bit ํ๊ฒฝ์์๋ 4byte ๊ฐ ๋นจ๋ผ์ ๊ธฐ๋ณธ 4byte ์ ๋ ฌ์ ํ๋ค๊ณ ์๊ณ ์์๋ค.
ํ์ง๋ง ์ง์ค์ ๋ฌ๋๋ค.
๋ณดํต์ ๊ฒฝ์ฐ
struct _data {
ย ย int a; short b; int c ;
}
sizeof( _data ) ๋ฅผ ํ๋ฉด 12 ๊ฐ ๋์จ๋ค.
4+2+4 = 10 ์ด์ง๋ง 4byte ์ ๋ ฌ์ด ์ ์ฉ๋์ด 4+2+2(empty)+4 = 12 ์ด๋ค.
์ข ๋ค๋ฅธ ๊ฒฝ์ฐ๋ก
struct _data {
ย ย char a; char b; char c;
}
sizeof( _data ) ๋ฅผ ํ๋ฉด 3 ์ด ๋์จ๋ค.
4byte ๋ฐ์ดํฐ ์ ๋ ฌ์ ํ๋ฉด 1+1+1+1(empty) ๊ฐ ๋์ด 4๊ฐ ๋์ฌ๊ฑฐ ๊ฐ์์ง๋ง ๊ทธ๋ ์ง ์์๋ค.
char ๋ 1byte ์ด๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ฒด ์ ๋ ฌ์ด ํ์์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ณ ์์์ง๋ง ์กฐ๊ธ ๋ฌ๋๋ค.
๊ทธ๋์ ์กฐ๊ธ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ํ ์คํธ ํด๋ดค๋ค.
struct _data {
ย ย short a; short b; short c;
}
sizeof( _data ) = 6 ์ด ๋์จ๋ค?
์ด๊ฑฐ์ผ ๋ง๋ก 2+2+2+2(empty) = 8 ์ด ์๋๊ฐ? ๊ตฌ์กฐ์ฒด ์ ๋ ฌ์ ๊ฑฐ์ง๋ถ๋ ์ด๋ ๋ง์ธ๊ฐ?
struct _data {
ย ย short a; double b;
}
sizeof( _data ) = 12 ์ด๋ค. 2+2(empty)+8 = 12 ๋ก ๊ตฌ์กฐ์ฒด ์ ๋ ฌ์ด 4byte ๋ก ๋จนํ๋ค.
#pragma pack(8) ์ ์ฌ์ฉํ์ฌ 8byte ๋ก ์ ๋ ฌ์ ๋ฐ๊พธ๋ฉด 2 + 6(empty) + 8 = 16 ์ด ๋๋ค.
๊ตฌ์กฐ์ฒด ์ ๋ ฌ์ ์ ๋๊ณ ์๋ค. ์ ์ด๋ฐ์ผ์ด ๋ฐ์ํ๋๊ฐ ์คํ๊ฒฐ๊ณผ
๋ด๊ฐ ๋๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ๋์ด์๋ Data Alignment ๊ฐ๊ณผ ๊ตฌ์กฐ์ฒด์ ์์ฑ์ค ์ต๋ ์ฌ์ด์ฆ์ ๋น๊ตํ์ฌ ๋์ค ์์๊ฐ์ผ๋ก ์ ๋ ฌํด ๋ฒ๋ฆฐ๋ค.
Default 4byte ์์ ๊ตฌ์กฐ์ฒด ์ต๋ ์์น๊ฐ char ๋ฉด 1๋ก , short ๋ฉด 2, double ์ด๋ฉด default 4๋ก ์ ๋ ฌํ๋๊ฒ ์ด๋ค.
๊ฒฐ๋ก :ย ย ๊ตฌ์กฐ์ฒด ์ ๋ ฌ๊ฐ์ ๊ธฐ๋ณธ๊ฐ๊ณผ ๊ตฌ์กฐ์ฒด ์์ฑ์ ์ต๋ ์์น ๊ฐ๊ณผ ๋น๊ตํ์ฌ ์์์ชฝ์ผ๋ก ์ ๋ ฌ๋๋ค.














