2010-06-15 3 views
2

포인터가 바이트 정렬되어야하는 것과 같은 것을 읽습니다. 전형적인 32 비트 아키텍처에서의 필자의 이해 ... 모든 포인터는 바이트 정렬 ... 아니요?포인터는 항상 바이트 단위로 정렬됩니다.

확인해주십시오.

바이트 단위로 정렬되지 않은 포인터가있을 수 있습니까?

기본적으로 tx 디스크립터 메모리에 대한 하드웨어 참조 설명서에 언급되어 있습니다.

+3

단어 맞춤을 의미합니까? – Sjoerd

+0

아니요 ... 저는 바이트 정렬에 대해서만 묻습니다. 단어 맞춤에 대해 알고 있습니다 – kumar

+0

"N 바이트 정렬"되지 않았습니까? –

답변

9

예, 1 바이트보다 작은 메모리는 처리 할 수 ​​없습니다.

1

포인터 또는 숫자가 바이트 정렬되지 않으면 바이트 중간에 시작됩니다. 나는. 한 바이트의 일부 비트는 하나의 포인터에 속하고 다른 비트는 다른 포인터에 속하게됩니다. 이것은 이상하고 실제로는 발생하지 않습니다.

+0

바이트가 가장 작은 주소 지정 가능 단위이기 때문에 '발생하지 않음'이 발생하지 않습니다 ... – Spudd86

5

C에서 포인터는 개체 & dagger를 가리 킵니다.

전체 정수가 아닌 유일한 객체는 비트 필드입니다.

C 언어에서는 비트 필드에 대한 포인터를 만들 수 없습니다. 이 코드는 컴파일러 오류가 발생합니다 :

struct S { unsigned int a:4, b:4, c:4, d:3, e:1; }; 

int main (void) { 
    struct S s; 
    int *i = &s.b; // would point half a byte into s 
    return 0; 
} 

포인터는 그들이 가리 개체의 크기의 전체 수에 의해 증가 될 수있다 "비트 필드 'B'의 주소를 취할 수 없습니다."

크기가 1 바이트 미만인 개체에 대한 포인터를 만들거나 포인터를 1 바이트 미만으로 늘릴 수 없기 때문에 1 바이트 미만의 포인터는 가질 수 없습니다.

; C 의미에서 OO 의미가 아닙니다.

+0

+1 단검 및/또는 메모 – ShinTakezou

관련 문제