Apollo-11: การใช้การรวมแทน linker


9

เมื่อเร็ว ๆ นี้ในรูปแบบดิจิตอลและกลายเป็นซื้อคืนที่เดิมพอลโล 11 คำแนะนำรหัสที่มาของคอมพิวเตอร์ได้รับการทำใช้ได้สำหรับการดูบน Github

ในMAIN.agcผู้เขียน repo แสดงความคิดเห็นว่าพวกเขา

แยกซอร์สโค้ดเสาหินขนาดใหญ่ออกเป็นส่วนย่อยที่เล็กกว่าและจัดการได้มากกว่านั่นคือแยกเป็นไฟล์ # # แต่ละไฟล์

อีกไม่นานผู้เขียนกล่าว

อาจถูกถามอย่างสมเหตุสมผลว่าเหตุใดจึงมีการรวมแหล่งที่มาหลายหมื่นบรรทัดด้วยการรวมเข้าด้วยกันแทนที่จะรวบรวมไฟล์ต้นฉบับแยกจากกันแล้วเชื่อมโยงเข้ากับรูปแบบปฏิบัติการ คำตอบคือทีมพัฒนาดั้งเดิมไม่มีตัวเชื่อมโยง

ฉันรู้ว่าตัวเชื่อมโยงคืออะไรและฉันเข้าใจประเด็นของพวกเขา - แต่ฉันไม่เคยได้ยินวลี (เท่าที่ ASM ดำเนินการ) "เข้าร่วมด้วยวิธีการรวม"

สิ่งนี้หมายความว่า? เมื่อพิจารณาว่าตัวเชื่อมโยงเป็นเรื่องใหญ่ในการเขียนโปรแกรมฉันอยากรู้ว่าการทดแทนตัวเชื่อมโยงนี้ด้วย "วิธีการรวม" คืออะไรและมันทำงานอย่างไร


7
ตัวอย่างของการ "เข้าร่วมโดยวิธีการของการรวม" จะเป็นคำสั่งใน#include Cกล่าวอีกนัยหนึ่งแทนที่จะเป็นรหัส bing ที่คอมไพล์ลงบนส่วนประกอบที่เชื่อมโยงเข้าด้วยกันแล้วดูเหมือนว่า$สัญกรณ์จะมีเนื้อหาของไฟล์นั้นเพื่อสร้างไฟล์ต้นฉบับขนาดใหญ่หนึ่งไฟล์ ไฟล์แหล่งใหญ่ที่หนึ่งจะถูกคอมไพล์เป็นเอนทิตีเดียว
David Arno

1
@DavidArno ความคิดเห็นของคุณดูเหมือนจะเป็นคำตอบที่ดีกว่าทั้งสองคำตอบในกระดาน
Ross Presser

คำตอบ:


18

ดูเหมือนว่าพวกเขาหมายถึงการเรียงข้อความ / การแทรกแบบข้อความที่เรียบง่าย ในคำอื่น ๆ แม้ว่าข้อความต้นฉบับถูกแบ่งออกเป็นแต่ละไฟล์ที่โปรแกรมไม่ได้ถูกแบ่งออกเป็นโมดูล


-2

การรวมอย่างง่ายเปรียบเทียบกับการลิงก์อย่างไร

ดังนั้นการรวมที่ง่ายจึงทำได้โดยใช้ #include "someCFile.c"

โดยค่าเริ่มต้น linkers จะเพิ่มห้องสมุดรันไทม์ ด้วยการรวมสิ่งนี้จะต้องรวมอยู่ด้วย

ฉันสงสัยว่าการรวมจะใช้พื้นที่น้อยลงเนื่องจากวัตถุไม่จำเป็นต้องมีตารางที่มีจุดเข้าใช้งานและตัวแปรที่อาจมีชื่อ ในการเชื่อมโยงแบบไดนามิกตารางจุดเริ่มต้นจะต้องมี ฉันไม่แน่ใจว่าการเชื่อมโยงแบบสแตติกจะลบออกหรือไม่คุณสงสัยว่าจะไม่เป็นเช่นนั้น

ในแง่ของความเร็วในการประมวลผลการรวมอาจจะเร็วกว่าเล็กน้อย (แน่นอนในกรณีของไลบรารีที่เชื่อมโยงแบบไดนามิก) แต่มันไม่ยืดหยุ่นเท่าไหร่พวกมันเป็นแอพพลิเคชั่นหลายตัวที่ไม่สามารถแชร์ไลบรารีเดียวกันได้

เมื่อพิจารณาถึงขนาดไบนารีการรวมจะยิ่งใหญ่กว่า

เมื่อพิจารณาเวลารวบรวมการรวมจะใช้เวลานานกว่า

สำหรับคอมพิวเตอร์นำทางของนาซาการรวมง่าย ๆ ก็โอเคเพราะคอมพิวเตอร์นำทางมีเพียงโปรแกรมเดียวเท่านั้น


2
ฉันไม่คิดว่านี่จะตอบคำถามที่ว่า "มันคืออะไรและทำงานอย่างไร"
2559

tofro: ฉันตีความ "มันหมายความว่าอะไร?" มันจะหมายถึงอะไรจากมุมมองเชิงปฏิบัติในแง่ของขนาดไบนารี่และความเร็วในการประมวลผล
Robert Baron

"การรวมจะใหญ่กว่า" - อย่าเข้าใจสิ่งนี้ หากรหัสอยู่ในนั้นจะอยู่ในและใช้พื้นที่ - ไม่ว่ามันจะเข้าสู่ไบนารีได้อย่างไร อย่าเห็นด้วยกับเวลาในการคอมไพล์เพราะบิลด์แบบเต็มต้องใช้เวลาเท่ากัน คุณจะได้รับความเร็วเพิ่มขึ้นเมื่อทำสร้างและฉันสงสัยนี้เป็นประสบการณ์อยู่แล้วใน 60ies
tofro

ความเร็วในการดำเนินการจะเร็วขึ้นเนื่องจากฟังก์ชั่นทั้งหมดของระบบปฏิบัติการขั้นต่ำอยู่ในระดับปฏิบัติการดังนั้นสิ่งเหล่านี้จึงเป็นเพียงการโทรเมื่อเทียบกับการใช้อินเตอร์รัปต์ (ฉันกำลังพิจารณาระบบปฏิบัติการขั้นต่ำเช่น DOS ที่ใช้อินเตอร์รัปต์ของ 8086 เพื่อโทรออกระบบ) นอกจากนี้เนื่องจากระบบปฏิบัติการทั้งหมดจะถูกรวมเข้าด้วยกันสิ่งนี้จะกินเนื้อที่มากกว่าที่ไม่ได้เป็นและจะเพิ่มในเวลารวบรวม
Robert Baron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.