Để hiểu được nội tuyến, bạn cần hiểu lịch sử và cuộc sống như thế nào 20 (và 30) năm trước.
Chúng tôi đã viết mã trên các máy tính có ít bộ nhớ, do đó trình biên dịch không thể xử lý tất cả mã tạo ra một chương trình trong một lần. Trình biên dịch cũng rất chậm, vì vậy bạn không muốn phải biên dịch lại mã không thay đổi - mất hơn 24 giờ (trên một máy tính có giá cao hơn một chiếc xe hơi hàng đầu) để biên dịch lại tất cả mã là bình thường đối với một vài dự án tôi làm việc trên.
Do đó, mỗi tệp mã được biên dịch riêng biệt thành một tệp đối tượng. Mỗi tệp đối tượng bắt đầu với danh sách tất cả các chức năng mà nó chứa, cùng với địa chỉ của Google. Một tệp đối tượng cũng có một danh sách tất cả các chức năng mà nó được gọi trong các tệp đối tượng khác cùng với vị trí của cuộc gọi.
Trước tiên, một trình liên kết sẽ đọc tất cả các tệp đối tượng và xây dựng một danh sách tất cả các chức năng mà chúng xuất ra, cùng với tệp mà chúng có trong đó và có địa chỉ. Sau đó, nó sẽ đọc lại tất cả các tệp đối tượng, xuất chúng thành tệp chương trình, trong khi cập nhật tất cả các lệnh gọi hàm bên ngoài của hồi giáo với địa chỉ của hàm.
Trình liên kết không thay đổi hoặc tối ưu hóa mã máy do trình biên dịch tạo ra bằng bất kỳ cách nào khác ngoài việc sửa các tham chiếu đến các lệnh gọi hàm bên ngoài. Trình liên kết là một phần của hệ điều hành và có trước hầu hết các trình biên dịch. Khi mọi người viết một trình biên dịch mới, họ cần nó để làm việc với các trình liên kết hiện tại và để có thể liên kết với các tệp đối tượng hiện tại, nếu không các cuộc gọi hệ thống không thể được thực hiện.
Trình biên dịch chỉ nhìn thấy mã trong tập tin .cv hoặc hoặc .cppv mà nó đang biên dịch cùng với tất cả các tệp tiêu đề đi kèm. Vì vậy, nó không thể thực hiện bất kỳ tối ưu hóa nào dựa trên mã trong các tập tin khác.
Từ khóa trong dòng trực tuyến, cho phép phần thân của hàm (phương thức) được xác định trong tệp tiêu đề, do đó cho phép trình biên dịch sử dụng mã của hàm trong khi biên dịch mã gọi nó. Ví dụ: bạn đã có một lớp tập hợp được định nghĩa trong tệp .cpp bao phấn, lớp này sẽ có một phương thức is is ismpmp, có chứa một dòng mã, sẽ có một sự tăng tốc lớn của chương trình kết quả nếu thay vì gọi một hàm , cuộc gọi chức năng đã được thay thế bằng một dòng này.
Từ khóa trực tuyến trên nền tảng trực tuyến được xem là một cách rẻ tiền và dễ dàng để cho phép đóng gói dữ liệu trong khi tránh chi phí của các cuộc gọi hàm, nếu không có nhiều lập trình viên sẽ chỉ truy cập vào các trường riêng của đối tượng. (Macros, một cách tồi tệ hơn nhiều khi đặt nội tuyến mã vào nơi phổ biến tại thời điểm đó.)
Những ngày này, các trình liên kết của MIT, rất nhiều tối ưu hóa mã và có xu hướng được viết bởi một số nhóm làm trình biên dịch. Trình biên dịch thường chỉ kiểm tra mã là chính xác và nén nén nó, để lại hầu hết các nhiệm vụ tạo mã máy cho trình liên kết.