메모리 주소가 정렬되거나 정렬되지 않은 시기 확인

메모리 주소가 정렬되거나 정렬되지 않은 시기 확인

ppp 드라이버가 정렬되지 않은 주소(정렬되지 않은 주소를 가리키는 포인터가 있음)에 액세스하려고 하기 때문에 커널 오류가 발생합니다. 정렬되지 않은 주소의 의미를 잘 모르겠습니다. 다중이 아니거나 4개가 아니거나 RAM 범위를 벗어나는 것을 의미합니까? 내 시스템에 32비트 폭의 버스가 있는 경우 주소가 주어지면 정렬되었는지 또는 정렬되지 않았는지 어떻게 알 수 있습니까?

답변1

간단히 말해서 정렬되지 않은 주소는 (보통) 바이트보다 크고 읽으려는 데이터 유형의 크기로 균등하게 나눌 수 없는 단순한 유형(예: 정수 또는 부동 소수점 변수) 중 하나입니다.

Address % Size != 0

다음과 같은 메모리 범위가 있고 4바이트를 읽었다고 가정해 보겠습니다.

                           +---------- 8 % 4 = 0, OK
                           |
                     ______+______
                    |             |
 ... 4   5   6   7   8   9   10  11  12  13  14  15  16  17 ...
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
 * | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
                            |_______.______|
                                    |
                                    +--- 10 % 4 = 2, Unaligned

이 문제에 대한 자세한 내용은문서/unaligned-memory-access.txt.

관련 정보