Em học lập trình C/C++, thấy trong một số chương trình người ta có để từ khóa inline trước một hàm? Ai có thể giải thích cho em ý nghĩa của từ khóa này và tại sao nó lại được sử dụng không ạ?


*
Lê Nga • 30

Ngôn ngữ lập trình C/C++ là một ngôn ngữ lập trình khá lâu đời, sử dụng hàm với từ khóa inlinenếu quay lại thời kỳ của những năm 80 thì nó góp phần đáng kể vào việc tăng tốc thời gian thực thi mã nguồn của một hàm nhất định có trong chương trình, do lúc đó phần cứng còn hạn chế, việc tối ưu hóa chương trình một cách tốt nhất là điều cần thiết. Bây giờ phần cứng máy tính đã rất mạnh, CPU đã được tối ưu hóa, dung lượng RAM khá lớn, ...v.v nên mặc dù sử dụng hàm inline còn rộng rãi nhưng không đem lại hiệu quả thời gian thực thi đáng kể mấy.

Bạn đang xem: Inline là gì

Nhưng nếu bạn đã hỏi thì mình sẽ trả lời tại sao người ta lại sử dụng từ khóa inline. Để hiểu được điều này, bạn cần phải hiểu cơ chế hoạt động của compiler (trình biên dịch). Khi chạy chương trình trong hàm main(), trình biên dịch bắt gặp một hàm nào đó thì nó sẽ:

Ngay lập tức cấp phát địa chỉ ô nhớ cho hàm này.Nạp (load) hàm vào trong bộ nhớ.Nhảy vào vùng địa chỉ bộ nhớ chứa hàm này.Thực thi đoạn mã nguồn có trong hàm.Lưu lại giá trị trả về của hàm.Nhảy ra ngoài và tiếp tục thực hiện các câu lệnh tiếp theo.

Do đó, quá trình thực thi của compiler tốn rất nhiều thời gian, nếu trong trường hợp một hàm nhỏ nào đó được gọi đi gọi lại một cách nhiều lần thì sao? Giả sử bạn có đoạn chương trình sau:

#include using namespace std;int tinhBieuThuc(int a, int b){ return a*a*b + b*b*a - 2*a*b;}int main(){ for(int i = 0; i Có 1.000 * 1.000 = 1.000.000 vòng lặp, cứ mỗi lần lặp lại gọi hàm tinhBieuThuc() biểu thức một lần, mỗi lần gọi thì quá trình thực thi của trình biên dịch lại diễn ra như trên, điều này chắc chắn không ổn rồi đúng không nào?

Cho nên, ta sử dụng từ khóa inlineđể hàm ý nói với trình biên dịch rằng đừng thực thi hàm đó một cách "lằn nhằn" như vậy, mà thực thi trực tiếp đoạn mã nguồn có bên trong hàm đó luôn, do đó có thể tăng tốc thời gian thực thi lên đáng kể.

Từ khóa inline trong C/C++ chỉ mang ý nghĩa gợi ý cho trình biên dịch thôi nhé. Vì thực tế khi chạy trình biên dịch sẽ quyết định xem hàm đó có được sử dụng theo inline hay không? Vậy trình biên dịch sẽ quyết định như thế nào?

Nếu hàm với từ khóa inline là một hàm nhỏ, trình biên dịch sẽ "chiều" ý bạn.Nếu hàm với từ khóa inline là một hàm lớn, phức tạp, trình biên dịch sẽ xem hàm đó như một hàm thông thường mặc dù bạn có khai báo inline hay không.

Xem thêm: Cây Bút Chì Tiếng Anh Đọc Là Gì, Từ Vựng Tiếng Anh Về Các Đồ Dùng Trong Lớp Học

Sử dụng hàm với từ khóa inline cũng có một số điểm bất lợi mà điển hình nhất là làm tăng kích thước chương trình của bạn nếu bạn sử dụng không đúng cách.