Hỏi nhanh đáp gọn

Khái niệm hàm inline trong C

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 đến 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 số 1 là điều cần thiết. Bây giờ phần cứng máy tính đã rất nhiều 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 chưa đem lại hiệu quả nhất thời gian thực thi đáng kể mấy.

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 đến 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ớ.Tạo bản sao cho các tham số đã được khởi tạo bằng tham trị hoặc sử dụng trực tiếp địa chỉ của tham số nếu truyền bằng tham chiếu. các bạn có thể xem thêm bài viết phân biệt cách truyền tham trị và tham chiếu trong C/C++.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 hạn, 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 :

Bạn đang đọc: Khái niệm hàm inline trong C

#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 chưa ổn rồi đúng chưa nào?

Khái niệm hàm inline trong C

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ìm hiểu thêm: Khai quật mộ Tào Tháo, thấy vũ khí thất truyền nghìn năm, chuyên gia xuýt xoa: Báu vật!

Influencer là gì? Công thức lựa chọn Influencer tốt nhất trong Marketing

Influencer chính là gì? Công thức lựa chọn Influencer hiệu quả nhất trong Marketing

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 là không? Vậy trình biên dịch cũng sẽ quyết định như thế nào?

Nếu hàm với từ khóa inline chính 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 chính 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.Sử dụng hàm với từ khóa inline cũng có 1 số ít điểm bất lợi mà nổi bật số 1 chính là thực hiện tăng size chương trình của bạn nếu bạn sử dụng không đúng cách . Có vướng mắc hay chỗ nào sai nhớ thông tin mình biết với nhé .

Tìm hiểu thêm: Chân thành là gì vậy? Chân thành hay trân thành khi cảm ơn