[t:/]$ 지식_

ARM vs Cortex A8 / Unaligned Access

2011/12/14

임베디드 개발하는 사람들은 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.

당근 느려진다 쓰지마쓰지마쓰지마 니가 대운하 건설사야 뭐야?

가급적 쓰지 말자...









[t:/] is not "technology - root". dawnsea, rss