Inline Function trong C++

Trong C++ có cách khai báo hàm inline. Hiểu một cách tương tự hoặc dễ hiểu thì nó gần như là replace text ở trong hàm. Hàm inline có tác dụng giảm một cách đáng kể thời gian thực thi chương trình nếu hàm nhỏ bởi đoạn code thực thi sẽ sẵn sàng được nhúng trực tiếp vào đoạn code.

Ưu/Nhược điểm:

[+] Tăng tốc độ thực thi chương trình.
[+] Khiến mã dễ đọc dễ hiểu hơn nhiều. Đặc biệt với những phép tính phức tạp, tên hàm có thể thay cho lời giải thích mà không cần phải tốn thêm một dòng chú thích ở code gốc. Người kế thừa có thể tự do đọc tiếp mà bỏ qua phần thực thi bên trong.

Nhược: Nếu dùng không chính xác có thể dẫn đến tăng dung lượng chương trình sau khi build.

Ví dụ với chương trình sao

/// Bỏ qua phần include

void PrintfNumber(int num) {
    printf("%d\n", num);
}

int main() {
    PrintfNumber(1);
    PrintfNumber(2);
    PrintfNumber(3);
    PrintfNumber(4);
    return 0;
}

Thì sau đó compiler sẽ rút gọn lại như sau:

void PrintfNumber(int num) {
    printf("%d\n", num);
}

int main() {
    printf("%d\n",  1);
    printf("%d\n",  2);
    printf("%d\n",  3);
    printf("%d\n",  4);
    return 0;
}

Nó gần như sẽ thay thế toàn bộ phần code gốc bằng code trong hàm inline.

[?] Vậy tại sao nó lại giảm được tốc độ thực thi?

Vì compiler sẽ không phải tạo thêm con trỏ hàm cho hàm được khai báo mà nó sẽ đưa cả phần code đó vào trong chương trình. Hiển nhiên lập trình viên muốn tối ưu sẽ cảm thấy đôi khi bỏ qua 2-3 phần code lặp lại nhưng tăng tốc cho tốc độ chương trình lên đáng kể thì không có vấn đề gì cả. Bởi phần đó chỉ tốn vào byte bộ nhớ nhưng vì hàm đó được gọi đi gọi lại nhiều lần nên mỗi khi chạy qua dòng code đó, chương trình hoàn toàn không phải tìm đến con trỏ hàm rồi mới thực hiện gọi hàm nữa. Nếu là 1000 lần lặp thì hiển nhiên là code sẽ chạy nhanh hơn đáng kể.

[!]  Nhưng...

Nhưng với class thì lại là câu chuyện khác. Trong các hàm của class thì có số đông là xử lý nội tuyến, điều này dẫn đến việc cố gắng xử lý nội tuyến trong class xem như là một hành vi có phần ... ngu ngốc. Cần phải hiểu rằng nội tuyến có cả hai mặt là lợi và hại cho nên trước khi sử dụng nội tuyến cho một thứ gì đó cần thiết phải đánh giá đúng bản chất của vấn đề rồi mới thực hiện.

Nhận xét

Bài đăng phổ biến từ blog này

Cách tạo ra một phần mềm exe với python