🏷️Alignment Requirement(정렬 제한)
- 메모리로의 효과적인 접근을 위해 or 그럴 수 밖에 없는 상황에서 implementation이 특정 데이터형의 대상체를 특정 정수의 배수에 해당하는 번지에 위치시키는 것.
- 이 때문에 서로 다른 포인터 타입간의 변환은 alignment requirement을 위반할 경우 결과는 정의되지 않는다.
- 🔍ex)
char c;
int *pi;
pi = (int *)&c;
- 만약 int가 4의 배수 번지로 정렬되도록 요구하는 implementation이라면,
&c
의 주소값이 4의 배수가 아닌 상태에서 위의 변환 문제를 일으킬 것이다.
- 결론은 어떠한 데이터형이든 다른 데이터형 사이의 포인터 변환은 alignment requirement를 위반할 수 있기 때문에 이식성을 갖지 못한다.