假設我們有一些功能使用深度嵌套的指針非常廣泛:使用深度嵌套的指針
function (ptr_a_t ptr_a) {
...
a = ptr_a->ptr_b->ptr_c->val;
b = ptr_a->ptr_b->ptr_c->val;
...
}
假定所有的指針進行檢查和有效的,有沒有性能下降,與原子或其他注意事項的問題(除可讀性)與比較:
function (ptr_a_t ptr_a) {
val = ptr_a->ptr_b->ptr_c->val;
...
a = val;
b = val;
...
}
更新 我編譯這個C文件(僅用於研究目的而編寫)用gcc -S:
typedef 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);
}
對於GCC -S:
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)
相同我觀察使用內部結構揮發性 specificator。 因此,嵌套指針被強制優化。
另一種選擇:a = b = ptr_a-> ptr_b-> ptr_c-> val; – Nyan 2010-06-26 03:30:40