Tôi đang cố gắng tìm ra bao nhiêu chu kỳ đồng hồ hoặc tổng số hướng dẫn cần để truy cập một con trỏ trong C. Tôi không nghĩ rằng tôi biết làm thế nào để tìm ra ví dụ, p-> x = d-> a + f-> bCó bao nhiêu hướng dẫn để truy cập con trỏ trong C?
tôi giả sử hai tải trên mỗi con trỏ, chỉ cần đoán rằng sẽ có tải cho con trỏ và tải cho giá trị. Vì vậy, trong hoạt động này, độ phân giải con trỏ sẽ là một yếu tố lớn hơn nhiều so với việc bổ sung thực tế, như xa như cố gắng để tăng tốc độ mã này lên, phải không?
Điều này có thể phụ thuộc vào trình biên dịch và kiến trúc được triển khai, nhưng tôi có đi đúng hướng không?
Tôi đã thấy một số mã trong đó mỗi giá trị sử dụng trong tiếng nói, 3 bổ sung, xuất thân từ một loại
f2->sum = p1->p2->p3->x + p1->p2->p3->a + p1->p2->p3->m
của cấu trúc, và tôi đang cố gắng để xác định cách xấu này là
phụ thuộc vào chế độ địa chỉ imho - gần nhảy/nhảy dài, tính toán địa chỉ ... –
nhớ trình biên dịch * nên * di chuyển rất nhiều thứ này vào ngăn xếp sau khi tìm nạp nó một lần. Nếu nó không phải là, và bạn không cần phải lo lắng về đa luồng, bạn có thể cache con trỏ tự đuổi theo. –
@Robert: nếu đa luồng sẽ ảnh hưởng đến dereferencing con trỏ trong ví dụ, sau đó mã cần serialization rõ ràng - một trình biên dịch tối ưu sẽ luôn có thể cache 'p3' vào thanh ghi và sử dụng nó cho tất cả 3 thành viên truy cập (giả sử có không sử dụng thành viên 'volatile' nào). –