2010-06-09 30 views

Trả lời

3

Here là một bài viết giải thích thời điểm sử dụng fastcall. Nó thực sự xác định một trường hợp khi bạn thực sự không có thay thế nhưng để sử dụng nó:

Một số lớp VCL, chẳng hạn như TList, cho phép bạn chỉ định một chức năng gọi lại (một thói quen loại trong trường hợp TList). Bạn cũng sẽ phải sử dụng từ khóa __fastcall trong trường hợp này, vì VCL mong đợi nó.

+0

Cảm ơn bạn. Lưu ý: từ bài viết của bạn, trong "Có __fastcall thực sự nhanh không?" section: "Điểm mấu chốt với các bài kiểm tra của tôi là quy ước gọi điện của Register không nhanh hơn quy ước gọi C và, trong hầu hết các trường hợp, chậm hơn. Được, sự khác biệt về thời gian là rất nhỏ nhưng tôi đã tự chứng minh rằng nó sẽ khó khăn cho những người ủng hộ __fastcall tuyên bố rằng quy ước gọi điện thoại đăng ký nhanh hơn bất kỳ " ..." để lặp lại những gì tôi đã nói, tôi khuyên bạn không bao giờ sử dụng __fastcall trừ khi nó được yêu cầu cụ thể ":) – rkellerm

5

__fastcall cố gắng chuyển đối số hàm trong sổ đăng ký CPU thay vì ngăn xếp nếu có thể, nhanh hơn.

Dưới đây là một liên kết đến một bài viết MSDN giải thích __fastcall gọi hội nghị: http://msdn.microsoft.com/en-us/library/6xa169sk(VS.71).aspx

Hai DWORD đầu tiên hoặc nhỏ hơn đối số được truyền trong ECX và EDX đăng ký; tất cả các đối số khác là được truyền sang phải sang trái.

Điều này có nghĩa là điều này sẽ chỉ hoạt động cho hai đối số đầu tiên và chỉ khi chúng là < = 32 bit.
Nói chung tôi sẽ nói, không mong đợi bất kỳ lợi thế hiệu suất lớn từ này.

+1

Cảm ơn liên kết. –

1

Tôi có một trường hợp mà tôi sử dụng nó một cách hiệu quả - đó là một thói quen asm rất nhỏ (3 hướng dẫn) thao tác một giá trị duy nhất trong sổ đăng ký.

Đối với bất cứ điều gì, nhưng các quy trình rất nhỏ và hiệu suất quan trọng nhất mặc dù quy ước gọi điện thực sự không tạo nên sự khác biệt nào.

Các vấn đề liên quan