우리는 약간의 기능에 매우 광범위하게 중첩 포인터를 사용할 수 있다고 가정 : 모든 포인터가 확인하고 유효 가정가
function (ptr_a_t ptr_a) {
...
a = ptr_a->ptr_b->ptr_c->val;
b = ptr_a->ptr_b->ptr_c->val;
...
}
을 제외하고 성능 저하, 자성 또는 다른주의 문제는 (이 내가 GCC -S와 조사 목적으로 만 작성이 C 파일을() 컴파일
function (ptr_a_t ptr_a) {
val = ptr_a->ptr_b->ptr_c->val;
...
a = val;
b = val;
...
}
업데이트 :에 비해 가독성)
GCC를 들어 -Stypedef struct {
int val;
} c_str_t;
typedef struct {
c_str_t *p_c;
} b_str_t;
typedef struct {
b_str_t *p_b;
} a_str_t;
void func (a_str_t *p_a)
{
int a,b;
a = p_a->p_b->p_c->val;
b = p_a->p_b->p_c->val;
printf("", a,b);
}
:
movl 8(%ebp), %eax
movl (%eax), %eax
movl (%eax), %eax
movl (%eax), %eax
movl %eax, -4(%ebp)
movl 8(%ebp), %eax
movl (%eax), %eax
movl (%eax), %eax
movl (%eax), %eax
movl %eax, -8(%ebp)
GCC -S -O1를 들어
movl 8(%ebp), %eax
movl (%eax), %eax
movl (%eax), %eax
movl (%eax), %eax
movl %eax, 8(%esp)
movl %eax, 4(%esp)
I는 구조물 내부 휘발성 specificator을 사용하여 관찰 동일. 따라서 중첩 포인터는 강제로 최적화됩니다.
다른 옵션 : a = b = ptr_a-> ptr_b-> ptr_c-> val; – Nyan