Tôi hiện đang có các hàm nội tuyến gọi một hàm nội tuyến khác (một hàm 4 dòng lớn đơn giản getAbs()
). Tuy nhiên, tôi phát hiện ra bằng cách tìm đến mã bộ mã hóa mà các hàm nội tuyến "lớn" được inlined tốt, nhưng trình biên dịch sử dụng bước nhảy bl
để gọi hàm getAbs()
.nội tuyến một chức năng bên trong một hàm nội dòng khác trong C
Không thể nội dòng một hàm trong hàm nội tuyến khác? Bằng cách này, đây là mã nhúng, chúng tôi không sử dụng các thư viện chuẩn.
Chỉnh sửa: Trình biên dịch là WindRiver và tôi đã kiểm tra rằng nội tuyến sẽ có lợi (4 hướng dẫn thay vì + -40).
Bạn đang sử dụng trình biên dịch nào? Có nhiều cách để buộc nội tuyến. Tôi đoán bạn đã lược tả mã của bạn và khá tự tin rằng nội tuyến sẽ có lợi. Trong GCC, điều này có thể được thực hiện với __attribute __ ((always_inline)). – stinky472
Tôi có thể hỏi tại sao bạn quan tâm đến những quyết định mà trình biên dịch đã thực hiện? Bạn đã lược tả mã và tìm thấy chi phí của lệnh nhảy một lần đó là giết chết hiệu suất? – JeremyP