เพื่อทำความเข้าใจ "อินไลน์" คุณต้องเข้าใจประวัติศาสตร์และชีวิตเป็นอย่างไรเมื่อ 20 ปีก่อนและ 30 ปี
เรากำลังเขียนโค้ดบนคอมพิวเตอร์ที่มีหน่วยความจำน้อยดังนั้นจึงเป็นไปไม่ได้ที่คอมไพเลอร์จะประมวลผลโค้ดทั้งหมดที่ประกอบเป็นโปรแกรมในครั้งเดียว คอมไพเลอร์ก็ช้ามากดังนั้นคุณไม่ต้องการที่จะคอมไพล์โค้ดที่ไม่ได้เปลี่ยน - ใช้เวลา 24 ชั่วโมง (บนคอมพิวเตอร์ที่มีราคาสูงกว่ารถยนต์ระดับบนสุด) เพื่อคอมไพล์รหัสทั้งหมดเป็นเรื่องปกติสำหรับบางโครงการฉัน ทำงานใน
ดังนั้นไฟล์โค้ดแต่ละไฟล์จะถูกคอมไพล์แยกกันเป็นไฟล์อ็อบเจ็กต์ แต่ละอ็อบเจ็กต์ไฟล์เริ่มต้นด้วยรายการของฟังก์ชันทั้งหมดที่มีอยู่พร้อมกับ "ที่อยู่" ของฟังก์ชัน อ็อบเจ็กต์ไฟล์ยังมีรายการฟังก์ชันทั้งหมดที่ถูกเรียกในไฟล์อ็อบเจ็กต์อื่น ๆ พร้อมกับตำแหน่งของการโทร
ลิงเกอร์ครั้งแรกที่จะอ่านไฟล์ทั้งหมดวัตถุและสร้างรายชื่อของฟังก์ชั่นทั้งหมดที่พวกเขาส่งออกพร้อมกับไฟล์พวกเขาอยู่ในและที่อยู่ที่นั่น จากนั้นจะอ่านไฟล์ออบเจ็กต์ทั้งหมดอีกครั้งแล้วส่งออกไปยังไฟล์โปรแกรมในขณะที่อัพเดตการเรียกใช้ฟังก์ชัน "ภายนอก" ทั้งหมดด้วยที่อยู่ของฟังก์ชั่น
ตัวเชื่อมโยงไม่ได้เปลี่ยนแปลงหรือปรับแต่งรหัสเครื่องที่ผลิตโดยคอมไพเลอร์ในลักษณะอื่นใดนอกจากแก้ไขการอ้างอิงถึงการเรียกใช้ฟังก์ชันภายนอก ตัวเชื่อมโยงเป็นส่วนหนึ่งของระบบปฏิบัติการและคอมไพเลอร์ส่วนใหญ่มาก่อน เมื่อมีคนเขียนคอมไพเลอร์ใหม่พวกเขาจำเป็นต้องใช้มันเพื่อทำงานกับลิงเกอร์ปัจจุบันและเพื่อที่จะสามารถลิงค์ไปยังไฟล์วัตถุปัจจุบันมิฉะนั้นจะไม่สามารถทำการเรียกระบบได้
คอมไพเลอร์เท่านั้นที่เห็นรหัสในไฟล์“ .c” หรือ“ .cpp” ซึ่งรวบรวมไว้พร้อมกับไฟล์ส่วนหัวทั้งหมด ดังนั้นจึงไม่สามารถปรับให้เหมาะสมตามรหัสในไฟล์“ .c” หรือ“ .cpp” อื่น ๆ
คีย์เวิร์ด“ inline” อนุญาตให้เนื้อความของฟังก์ชัน (เมธอด) ถูกกำหนดไว้ในไฟล์ส่วนหัวดังนั้นการอนุญาตให้คอมไพเลอร์ใช้ประโยชน์จากรหัสของฟังก์ชันในขณะที่คอมไพล์โค้ดที่เรียกมัน ตัวอย่างเช่นสมมติว่าคุณมีคลาสคอลเลกชันที่กำหนดไว้ในไฟล์ anther .cpp คลาสนี้จะมีเมธอด“ isEmpty” ซึ่งมีโค้ดหนึ่งบรรทัดจะมีการเร่งความเร็วสูงของโปรแกรมที่เป็นผลลัพธ์ถ้าแทนที่จะเรียกใช้ฟังก์ชัน การเรียกใช้ฟังก์ชันถูกแทนที่ด้วยหนึ่งบรรทัดนี้
คำหลัก "inline" ถูกมองว่าเป็นวิธี "ถูกและง่าย" ในการอนุญาตให้มีการห่อหุ้มข้อมูลในขณะที่หลีกเลี่ยงค่าใช้จ่ายในการเรียกใช้ฟังก์ชั่นโดยที่โปรแกรมเมอร์จำนวนมากจะเข้าถึงฟิลด์ส่วนตัวของวัตถุ (มาโครที่โค้ด "inlining" ที่แย่กว่านั้นคือซึ่งเป็นเรื่องธรรมดาในเวลานั้น)
ทุกวันนี้“ ลิงเกอร์” ทำการเพิ่มประสิทธิภาพของโค้ดจำนวนมากและมักจะเขียนโดยทีมบางคนในฐานะคอมไพเลอร์ คอมไพเลอร์มักจะตรวจสอบรหัสถูกต้องและ "บีบอัด" มันออกจากงานส่วนใหญ่ของการสร้างรหัสเครื่องไปยังลิงเกอร์