3.7.2 Prologues và epilogues

PropellerAds

Hãy xem sơ đồ sau →

Sơ đồ này minh họa luồng xử lý trong suốt một lần gọi hàm từ ví dụ trước. Tất cả các lời gọi hàm khác sẽ được thực hiện theo cách tương tự. Cách làm như thế này có một số lợi thế: function, prologue và epilogue chiếm cùng một lượng bộ nhớ, không phụ thuộc vào việc hàm được gọi bao nhiêu lần. Có nghĩa là gọi nó theo cách này tiết kiệm bộ nhớ và làm cho chương trình nhỏ gọn hơn.

Nhưng…

Một trong những điều nghịch lý thú vị nhất của lập trình máy tính là khi một mã nhỏ gọn thì nó không thể chạy nhanh được; và ngược lại, khi mã nhanh, nó không thể nhỏ gọn. Hãy thử tưởng tượng rằng chương trình của chúng ta sẽ gọi hàm nhiều lần (ví dụ: hàng trăm hoặc hàng ngàn lần). Có nghĩa là bạn sẽ phải trả giá (bằng thời gian) cho tất cả những lần chuyển giao quyền điều khiển và thực hiện prologue/epilogue. Cái giá phải trả sẽ càng cao hơn khi hàm ngắn (tệ nhất là ngắn hơn cả prologue/epilogue).

Ví dụ này cho thấy rằng đôi khi, trong một số trường hợp nên tránh việc thực hiện các chuỗi prologue/epilogue bằng cách chèn code của  hàm vào code của invoker