ads 2

ARM FAQ - 정렬/정렬안 된 (Aligned/Unaligned) 엑세스및 __packed 사용

▷ 서론 다른 RISC 구조처럼, ARM 프로세스는 '정렬된 데이터' 즉 4의 배수의 주소에 있는 워드(word or fullword : 4바이트) 와 2의 배수에 있는 반워드(halfword : 2바이트) 를 효율적으로 엑세스하도록 설계되었다. 그런 데이터들은 자연 크기 경계(natural size boundary)에 존재한다고 한다. !) 번역시 워드는 전단어로 반워드는 반단어로 사용하기도 한다. ARM 컴파일러는 보통 LDR/STR 명령어를 이용 효율적인 데이터 엑세스를 가능하도록 자연 크기 경계에 전역 변수들을 정렬시킨다. 이것은 대부분의 CISC 아키텍쳐들에서 명령어가 '정렬되지 않은 데이터'를 직접적으로 엑세스 가능한 것과는 상반된 것으로, '정렬되지 않은 데이터'를 엑세스하는 기존 코드(le..

컴퓨터공부 2009.02.23

__packed 키워드

__packed 지시어는 컴파일러에게 데이터들이 바이트 단위로 위치해 있다고 알려줍니다. 구조체 에서 __packed 지시자는 모든 패딩값을 제거하기 위해 사용됩니다. struct { char a; int b; short c; char d; } 위 코드의 경우 리틀엔디안 메모리 시스템에서 아래와 같이 패딩 비트가 들어가게 됩니다. 주소 +3 +2 +1 +0 +-----------+-----------+-----------+-----------+ +0 | pad | pad | pad | a | +-----------+-----------+-----------+-----------+ +4 | b[31, 24] | b[23, 16] | b[15, 8] | b[7, 0] | +-----------+-------..

컴퓨터공부 2009.02.23