메모리 주소가 정렬되거나 잘못 정렬되는 시기 이해

메모리 주소가 정렬되거나 잘못 정렬되는 시기 이해

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

답변1

간단히 말해서, 정렬되지 않은 주소는 (보통) 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

이 문제에 대한 자세한 내용은 다음을 참조하세요.docs/unaligned-memory-access.txt.

관련 정보