🌱 Inline Function trong C

🌱 Inline Function trong C

   👉 Inline Function là gì?

    Inline Function trong C được định nghĩa là các hàm với mục đích thay thế nội dung hàm ngay tại vị trí gọi hàm, thay vì được gọi qua cơ chế gọi hàm thông thường. Điều này có thể cải thiện hiệu suất bằng cách giảm thiểu chi phí của việc gọi hàm, đặc biệt là đối với các hàm nhỏ và được gọi thường xuyên.

    Đặc điểm:

  • Về cấu trúc Inline Function có cấu trúc giống như một Function thông thường, bao gồm tên hàm, kiểu trả về của hàm, các tham số, và nội dung của hàm.
  • Về cách hoạt động thì Inline Function lại gần giống như một Function Like-Macro, nó thay thế lời gọi hàm bằng chính nội dung của hàm đó.
  • Tuy nhiên, thay vì được xử lý ở bước Preprocessor giống như Function Like-Macro, Inline Function được xử lý ở bước Compilation.
  • Không phải hàm nào thêm từ khóa "inline" cũng là inline, compiler sẽ quyết định xem có nên sử dụng hàm inline hay không dựa trên kích thước và độ phức tạp của hàm.

    👉 Cách sử dụng Inline Function

    Để khai báo một Inline Function, ta khai báo giống như một hàm thông thường nhưng thêm từ khóa Inline ở đầu, ví dụ:


    Hàm my_Function giờ là một inlune function và nó sẽ được thay thế bằng đoạn code printf("Hello") tại thời điểm gọi hàm trong quá trình Compile. Các bạn cần phân biệt được sự khác biệt so với các hàm thông thường, đó là lời gọi hàm - Function Call.

    💬 Một số trường hợp nên sử dụng hàm inline

  • Hàm nhỏ và đơn giản: Nếu hàm thực hiện một tác vụ đơn giản (ví dụ: tính toán một giá trị), việc sử dụng hàm inline có thể giúp giảm chi phí gọi hàm.
  • Gọi hàm nhiều lần: Nếu hàm được gọi nhiều lần trong mã, việc sử dụng hàm inline có thể cải thiện hiệu suất tổng thể.
  • Tối ưu hóa hiệu suất: Trong các ứng dụng yêu cầu hiệu suất cao, như xử lý tín hiệu, việc sử dụng hàm inline có thể giúp tăng tốc độ thực thi.
  • Hàm không có trạng thái: Hàm inline thường được sử dụng cho các hàm không có trạng thái (không thay đổi biến toàn cục hoặc không có hiệu ứng phụ), giúp dễ dàng theo dõi và tối ưu hóa.
  • Khi cần tăng tính rõ ràng của mã: Sử dụng hàm inline có thể làm cho mã dễ đọc hơn, vì nó giúp giảm số lượng dòng mã và tránh việc lặp lại mã.

    💬 Một số trường hợp compiler sẽ bỏ qua từ khóa "inline"

  • Hàm quá lớn: Nếu hàm có nhiều dòng mã hoặc logic phức tạp, trình biên dịch có thể quyết định bỏ qua từ khóa inline để tránh làm tăng kích thước nhị phân.
  • Hàm có nhiều nhánh điều kiện: Nếu hàm chứa nhiều câu lệnh điều kiện (if, switch), trình biên dịch có thể bỏ qua từ khóa inline vì sự không chắc chắn về cách thức thực thi.
  • Hàm có tham số không thể xác định: Nếu hàm nhận tham số mà không thể xác định được kiểu hoặc giá trị tại thời điểm biên dịch, trình biên dịch sẽ bỏ qua từ khóa inline.
  • Hàm có hiệu ứng phụ: Nếu hàm thay đổi trạng thái bên ngoài (như thay đổi biến toàn cục hoặc tương tác với I/O), trình biên dịch sẽ bỏ qua từ khóa inline.
  • Hàm được định nghĩa trong file source khác: Nếu hàm được định nghĩa trong một file source khác và không có định nghĩa inline trong cùng file hoặc không được biên dịch cùng nhau, trình biên dịch có thể bỏ qua từ khóa inline.
  • Số lượng gọi hàm quá ít: Nếu hàm chỉ được gọi một hoặc hai lần, trình biên dịch có thể quyết định rằng việc thêm inline không mang lại lợi ích về hiệu suất.
  • Cấu trúc hoặc lớp: Nếu hàm là một phương thức của lớp và không phải là static, trình biên dịch có thể không nội tuyến hóa nó.

     👉 Inline Function với GCC Compiler

    Với trình biên dịch GCC thì nó sẽ coi Inline Function như một phần của quá trình tối ưu hóa - Optimization. Vì vậy, việc gọi hàm Inline Function sẽ không thành công, do quá trình linker không thể tham chiếu tới hàm này. 


    Cách giải quyết ở đây là có thể tắt Optimization đi nếu có thể. Còn nếu vẫn muốn tiếp tục bật Optimize thì hãy thêm từ khóa static vào trước hàm inline. Điều này sẽ làm linker phải kiểm tra và tham chiếu đến hàm inline. 

Inline Function

    👉 Kết luận

    Inline function có cấu trúc như một function tuy nhiên cách sử dụng lại giống như Function Like-Macro, nó được xử lý trong quá trình Compile. Giống như Macro, nó cũng có thể làm tăng code size nếu như hàm quá lớn và được gọi nhiều lần. Vì vậy, Inline Function thường được xem xét sử dụng với những hàm có kích thước nhỏ, và xử lý số ít phép tính toán mà Marco không làm được.
    ➤ Hãy cân nhắn khi cần sử dụng Inline Function.

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

    Chúc các bạn học tập tốt 😊

3 Nhận xét

  1. kiểu hàm này dùng để làm gì vậy anh

    Trả lờiXóa
  2. Anh cho em hỏi ý "Linker không thể tham chiếu ..." là sao a nhỉ? Em nghĩ thay thế hoặc không thay thế chứ sao lại có tham chiếu gì nữa ta.

    Trả lờiXóa
Mới hơn Cũ hơn