struct align에 대한 단상

struct_align

동일한 내용의 정보를 가지는  개념적으로는 똑같은 사이즈인 두개의 구조체가 있다.
64비트에서 컴파일해보면 이 두개의 구조체는 각각 다른 사이즈를 가진다.
물론 #pragma pack(push,1)을 주면 똑같은 사이즈로 컴파일 된다.

STRUCT_ALIGNED의 크기는 32바이트고 STRUCT_UNALIGNED의 크기는 40바이트다.
STRUCT_UNALIGNED구조체의 경우 1차적으로 패널티를 피하기 위해서 변수별로 padding이 들어간다.
변수마다 억세스 단위만큼의 얼라인을 맞추게 되고 최종적으로 구조체가 배열로 잡히더라도 8바이트에 얼라인 될 수있도록 사이즈가 8의 배수로 잡힌다.

STRUCT_ALIGNED의 경우는 모든 변수가 패널티 없이 억세스할 수 있다. 최종적으로 8의 배수로 잡히기 위해 마지막 4바이트 padding만 붙는다.

물론 나는 전자와 같이 코딩해야 한다고 생각한다.

라이트맵 구울때라든가 패치 사이즈를 줄여야하는 경우에 얼라인을 고려하면 사이즈를 줄일 수 있다. 사이즈가 줄어들어 캐쉬히트 가능성도 높아진다.

음 근데 “성능과 메모리절약을 위해서 얼라인을 고려하자.”라고 하는건 아니다.
사실 대부분의 경우 성능차이는 미비하다. 몇몇 경우를 제외하고 메모리 사이즈도 크게 차이나지 않는다.
나도 잘 안다. 그럼에도 이런 얘길 왜 햐느냐.

남이 짠 코드를 볼때 얼라인을 고려해서 쓰여진 코드를 보면 굉장히 신뢰가 간다. 한땀한땀 신경써서 짜는거거나, 프로그램 많이 짜봤구나. 그런 생각이 든다.

반면 얼라인이 엉망인 코드를 보면 엄청난 불신이 생긴다. 이 사람이 짠 코드 믿어도 되는거야?

남이 짠 코드 보다가 생각이 나서 적어봤다.
얼라인이 엉망이라 굉장히 거슬리네. 뭐 코드 맘에 안드는 부분이 구조체 얼라인 뿐만이 아니지만.-_-;


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

w

%s에 연결하는 중