내용으로 건너뛰기
사용자 도구
로그인
사이트 도구
도구
문서 보기
이전 판
백링크
최근 바뀜
미디어 관리
사이트맵
로그인
최근 바뀜
미디어 관리
사이트맵
기술자료
작업공간
개인공간
사이트맵
추적:
kb:memoryalignment
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Memory Alignment ====== [[MemoryAlignment]]란 아래와 같은 구조체의 크기가 11 바이트가 아니라, 컴파일러의 패딩에 의해 12 또는 16바이트가 되는 현상을 두고 하는 말이다. <code cpp> struct EMP { int ID; // 4 바이트 char state[3]; // 3 바이트 int salary; // 4 바이트 }; sizeof(EMP) = ??? </code> 파일/소켓 등에서 입출력을 수행할 때 주로 문제가 된다. [[MemoryAlignment]]란 것이 있는 줄도 모르던 시절에 TGA 이미지 헤더를 읽어들이는데, 고생했던 기억이 새록새록... ㅠㅠ [[VisualCpp|Visual C++]]에서는 <nowiki>#pragma pack</nowiki> 구문을 이용하여 간단히 해결할 수 있다. 파일/소켓 등에 기록하는 구조체는 정렬을 1바이트로 줘야할 것이다. 다른 컴파일러에도 비슷한 구문이 있을 듯 하다. <code cpp> // pragma_directives_pack.cpp // compile with: /W1 /LD #pragma pack() // n defaults to 8; equivalent to /Zp8 #pragma pack(show) // C4810 #pragma pack(4) // n=4 #pragma pack(show) // C4810 #pragma pack(push, r1, 16) // n=16, pushed to stack #pragma pack(show) // C4810 #pragma pack(pop, r1, 2) // n=2 , stack popped #pragma pack(show) // C4810 </code> ====== 링크 ====== * [[http://weblogs.asp.net/oldnewthing/archive/2004/08/26/220873.aspx | Why do some structures end with an array of size 1?]] * [[http://blogs.msdn.com/oldnewthing/archive/2004/08/27/221486.aspx | Importance of alignment even on x86 machines, part 1]] * [[http://blogs.msdn.com/oldnewthing/archive/2004/08/30/222631.aspx | Importance of alignment even on x86 machines, part 2]] * [[http://www-128.ibm.com/developerworks/library/pa-dalign/ | Data alignment: Straighten up and fly right]]
kb/memoryalignment.txt
· 마지막으로 수정됨: 2014/11/08 14:38 (바깥 편집)
문서 도구
문서 보기
이전 판
백링크
맨 위로