임베디드 개발하는 사람들은 unaligned access에 대해서 굉장한 기피를 갖고 있고, 안된다, 버그 생긴다, 컴파일 튕긴다, 데>이터 어보트 뜬다, 나중에 문제 생긴다 등등 경험으로 얻은 내 마음속의 사대강 사업이 하나씩은 있을 것이다. 따라서 임베디 드 상에서 void *에 의한 구조체 교환, 네트워크 프로그래밍 시 발생하는 패킷 데이터의 정렬, 리오더링을 상당히 신경을 쓰>곤 한다.
주로 sizeof 때려봤을 때 구조체 크기가 틀어지기도 하고, 버릇처럼 4 byte 얼라인에 맞춰 dummy 바이트를 넣기도 한다.
ARM의 경우도 마찬가지다.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3721.html
그러나 Cortex A8 코어를 보자. 내 얘기좀 들어볼래? 나는 나를 넘어섰다.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/Beihgifg.html
즉슨, unaligned access가 된다. 따라서 위 정보에 근거하여 sizeof 때려보면..
struct aa {
char b[3];
int p;
}
이런 구조체에 대해서 ARM 9 에서는 packed를 쓰지 않는 한 8바이트가 나올 것이다. Cortex에서는 7바이트가 나올 것이다.
아 실험해보고 글을 올려야 되는데 미안. 언제나 그렇듯이 아님 말고.
그러나 위에 소개된 링크에도 나와있듯이..
Note
Data accesses that cross a word boundary can add to the access time.
당근 느려진다 쓰지마쓰지마쓰지마 니가 대운하 건설사야 뭐야?
가급적 쓰지 말자...