offsetof 매크로에 대해서.
글쓴이: happyKYS / 작성시간: 수, 2014/08/27 - 11:26오전
안녕하세요. 소소한 의문점이 있어서 문의드립니다.
offsetof 매크로를 왜 사용하는 것인가요?
얼라인먼트 차이로 아키텍처마다 offsetof 값이 다르게 나타날 수 있다는 것과 무관하게 offsetof 사용 이유 자체가 궁금합니다.
예를 들어 offsetof로 특정 아키텍처에서 thread_info 구조체의 cpu_context 멤버 변수까지의 거리가 뭐 8이다 라는 전제를 깔겠습니다.
위에서 offsetof로 구해논 8이 의미를 가지고 쓰여지려면, 어떤 특정 thread_info 구조체의 시작주소는 이미 알려져 있을 것입니다.
그러면 힘들게 offsetof를 가지고 연산할 필요 없이
그냥... 특정 &(thread_info->cpu_context)-&(thread_info) 하면 얼라인먼트도 고려된 offset 이 구해질 거고(한마디로 매크로랑 동일)...
위에서 말했다시피.. 특정 thread_info의 시작 주소를 이미 알고 있다면(이걸 알고 있어야 offsetof가 쓸모가 있을 것이므로) 그냥 thread_info->cpu_context로 thread_info* 으로 타입 캐스팅만 해서
멤버변수를 사용하면 될텐데...
왜 offsetof를 쓰는건가요?
Forums:
포인터의 뺄셈은 같은 타입의 경우에만 가능하지
포인터의 뺄셈은 같은 타입의 경우에만 가능하지 않나요?
그리고 바이트 단위의 거리를 알아내려면 결국 (char *)등으로 형변환해야 하고, 그럼 offsetof랑 같아지는 듯
Signature :) - "여유를 갖고 행동하되 게을러지지 말자"
댓글 달기