01/10/2018, 13:27
Dùng inline (hàm nội tuyến) sẽ giúp chạy nhanh hơn, nếu vậy tại sao ta không dùng ở toàn bộ các hàm trong chương trình?
Cho em hỏi, dùng inline (hàm nội tuyến) sẽ giúp chạy nhanh hơn, nếu vậy tại sao ta không dùng ở toàn bộ các hàm trong chương trình ???
Bài liên quan
Hàm được khai báo “inline” không có nghĩa là compiler sẽ bắt buôc phải inline nó, mà tùy thuộc vào hàm mà compiler có inline hay không.
Không phải lúc nào cũng dùng hàm “inline” bởi vì khi hàm được inline quá dài và sử dụng nhiều lần trong source code, nó sẽ expand ra và làm tăng size của chương trình lên rất nhiều. Vì thế, thường ta sẽ inline những hàm có body ngắn thôi.
hơi rối rắm nhỉ
Inline về cơ bản nó sẽ không tạo ra lời gọi hàm mà chèn trực tiếp mã vào nơi hàm được gọi > tăng size (cụ thể là của file thực thi).
Giống như việc bạn học bài thi học kì, thầy cho đề cương gồm nhiều câu hỏi tự luận. Bạn thích gom các câu trả lời vào chung 1 tờ giấy A4 cho dễ học, đỡ mất thời gian học từng bài, hay chỉ cần đánh dấu trong vở những phần cần học.
Sử dụng inline cũng vậy.
Khi được nạp vào ram, mỗi hàm sẽ có địa chỉ nhất định, khi gọi thì cpu sẽ jump tới địa chỉ đó.
Viết inline thì compiler sẽ chèn luôn code của hàm đó vào, thay vì chèn địa chỉ, cpu chỉ chạy một mạch mà thôi, vậy nên sẽ nhanh hơn
Chỉ nên dùng cho getter và setter vì nó nhẹ mà hay được gọi
Hi Hoàng Huy.
Đúng như Nguyen_Thanh_Vu nói. Bạn khai báo “inline” thì chỉ là gọi ý trình biên dịch chép code thôi còn làm hay không là việc của nó (kiểu như các hàm đệ quy thì inline kiểu gì ?).
P/S
GG “inline function c/c++ why not use all”
Đâu có rối rắm gì đâu bạn? “Inline” chỉ là 1 gợi ý cho compiler. Còn compiler có thực sự inline cái function đó hay không thì mình không thể nói chắc chắn được (tức là tùy thuộc vào function đó như thế nào mà compiler quyết định có inline hay không).
Đọc từ trang 28, có vẻ nó giải thích khá chi tiết
slideshare.net
Introduction To C++ Lecture No. 7
Header Files in C++ Why We Need Header Files Inline Function in C++ Example of Inline Function in C++ Limitations of Inline Functions Inline Function Vs. Norma…
Mình xin bổ sung phần “Use inline function over macro” trong trang 29 là không đúng nha .
Sài macro dĩ nhiên có một số bất cập như có thể sẽ thực thi sai nếu các cặp đóng mở ngoặc (…) không đúng/đủ, cũng như việc có thể dẫn đến semantic errors nếu như thực thi các phép thay đổi biến trong macro. Tuy nhiên, MACRO đảm bảo việc expand function luôn diễn ra, còn inline function thì tùy thuộc vào compiler quyết định. Nên dùng cái nào thì tùy mục đích chứ không có chuyện cái này hơn cái kia.