메모리 상의 정렬 제한이 존재하는 환경이라 하더라도, c언어의 정의 상 char형 배열에 대해서는 각각의 원소에 대해 직접 접근이 가능해야 합니다. char a[8]의 두번째 원소 a[1]의 주소가 4의 배수가 아니라도 직접 접근이 가능해야 한다는 뜻이지요. 해당하는 환경에서 4바이트 단위의 메모리 정렬 제한이 존재한다면, 쉬프트 연산이나 기타 방법을 써서라도 C 컴파일러는 그 동작을 구현해야 할 의무가 있습니다.
근데 위의 구조체 test는 맴버 변수가 모두 char형 혹은 char형 배열이므로, 딱히 정렬제한을 위해 구조체 안에 빈공간을 넣을 필요가 없습니다. 넣으나 안넣으나 정렬제한을 어기게 되는 것은 마찬가지니까요.
위 구조체의 sizeof의 결과가 6이 나온게 맞습니다.구조체에
위 구조체의 sizeof의 결과가 6이 나온게 맞습니다.
구조체에 들어있는 구성이 char 변수 2개와 char형 배열 하나입니다.
그렇다면 char 형이 1바이트를 차지하므로 char형 변수들의 합은 2바이트가 되고 char 배열은 배열의 길이가 4 이므로 4바이트 (char * 4) 가 됩니다.
그러면 변수들의 합과 배열을 합하면 2+4 , 즉 6이 되지요.
아마도 맴버 변수가 char형으로만 이루어져 있다는 점 때문인 것 같군요
아마도 맴버 변수가 char형으로만 이루어져 있다는 점 때문인 것 같군요.
메모리 상의 정렬 제한이 존재하는 환경이라 하더라도, c언어의 정의 상 char형 배열에 대해서는 각각의 원소에 대해 직접 접근이 가능해야 합니다. char a[8]의 두번째 원소 a[1]의 주소가 4의 배수가 아니라도 직접 접근이 가능해야 한다는 뜻이지요. 해당하는 환경에서 4바이트 단위의 메모리 정렬 제한이 존재한다면, 쉬프트 연산이나 기타 방법을 써서라도 C 컴파일러는 그 동작을 구현해야 할 의무가 있습니다.
근데 위의 구조체 test는 맴버 변수가 모두 char형 혹은 char형 배열이므로, 딱히 정렬제한을 위해 구조체 안에 빈공간을 넣을 필요가 없습니다. 넣으나 안넣으나 정렬제한을 어기게 되는 것은 마찬가지니까요.
H/W 및 컴파일러별로 특성이 상이 할 수 있으니, 유의하시기 바랍니다.
H/W 및 컴파일러별로 특성이 상이 할 수 있으니, 유의하시기 바랍니다.
댓글 달기