Quy tắc của ngón tay cái là không thể vượt qua các cấu trúc nhỏ theo giá trị và những cái lớn hơn nên được làm con trỏ.Các cấu trúc lớn có thể được truyền bằng giá trị hiệu quả như thế nào?
Câu hỏi của tôi chính xác là điểm cắt này ở đâu? Làm thế nào lớn có thể các cấu trúc được trước khi bạn tốt hơn hết đi qua chúng bằng con trỏ.
Tôi biết điều này sẽ khác nhau giữa các nền tảng, nhưng tôi cho rằng một số ước tính sơ bộ có thể được đưa ra. Một hoặc hai năm trước, tôi đã cố gắng tìm hiểu điều này trên kiến trúc PPC và tôi ngạc nhiên rằng người ta có thể truyền khá nhiều dữ liệu một cách hiệu quả theo giá trị. Hãy suy nghĩ 10 giá trị gấp đôi hoặc như vậy là tốt vì số lượng lớn các thanh ghi trong PPC. Bởi con trỏ thực sự liên quan đến việc sao chép nhiều hơn trong và ngoài bộ nhớ.
Tuy nhiên bây giờ tôi đang ở trên intel và tôi hy vọng mọi thứ có thể khác nhau. Kể từ khi CPU không có nhiều đăng ký theo truyền thống, nhưng có lẽ đó là khác nhau trên 64bit hoặc đăng ký điểm nổi?
Nó phụ thuộc .... Bạn cần chuẩn ... –
Mitch là chính xác, cách duy nhất để biết là điểm chuẩn. Và câu trả lời của bạn sẽ khác nhau tùy thuộc vào nền tảng bạn thử nghiệm. –
Tôi đoán vấn đề của tôi là tôi không biết làm thế nào để băng ghế dự bị đánh dấu nó đúng cách. Tôi lo ngại rằng một ví dụ đơn giản sẽ dễ dàng được tối ưu hóa bởi trình biên dịch và không phản ánh việc sử dụng thực tế. Nó có vẻ ngu ngốc để làm tối ưu hóa sớm, nhưng đây là một cái gì đó tôi đã đấu tranh với việc có hiệu suất tốt trên vì vậy tôi không muốn làm cho sự lựa chọn ngu ngốc không cần thiết. Nó sẽ ảnh hưởng đến toàn bộ thiết kế API của tôi, vì vậy tôi không muốn phải thay đổi tất cả điều này sau này. –