“ การเชื่อมโยงที่เพิ่มขึ้น” คืออะไร?


105

ฉันได้ดู MSDN ของ Microsoft และทั่วทั้งเว็บแล้ว แต่ฉันก็ยังไม่เข้าใจว่ามันคืออะไร

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

ฉันเป็นทางออกโดยสิ้นเชิงหรือไม่? :)


1
ฉันเพิ่มคำตอบสำหรับ GNU ld แต่มันถูกลบไปแล้วนี่คือคำตอบที่คล้ายกัน: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东冠状病六四事件法轮功

มันถูกลบเนื่องจากคัดลอกวางและแตกต่างไม่ดี - ว่าดีเนื้อหาไม่มีen.wikipedia.org/wiki/Don%27t_repeat_yourself
มีนาคม

คำตอบ:


122

การเชื่อมโยงเกี่ยวข้องกับการรวมไฟล์. obj ทั้งหมดที่สร้างจากไฟล์ต้นฉบับของคุณตลอดจนไฟล์. lib ใด ๆ ที่คุณอ้างอิงลงในเอาต์พุตของคุณ (เช่น. exe หรือ. dll)

หากไม่มีการเชื่อมโยงเพิ่มเติมจะต้องทำตั้งแต่ต้นทุกครั้ง

ลิงก์ส่วนเพิ่มจะเชื่อมโยง exe / dll ของคุณในลักษณะที่ทำให้ผู้เชื่อมโยงสามารถอัปเดต exe / dll ที่มีอยู่ได้ง่ายขึ้นเมื่อคุณทำการเปลี่ยนแปลงเล็กน้อยและคอมไพล์ใหม่

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

เอฟเฟกต์รันไทม์เพียงอย่างเดียวที่อาจมีคืออาจทำให้ exe / dll ของคุณใหญ่ขึ้นและช้าลงเล็กน้อยตามที่อธิบายไว้ที่นี่:

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

แก้ไข: ตามที่ Logan กล่าวไว้การเชื่อมโยงแบบเพิ่มหน่วยยังใช้ไม่ได้กับการสร้างรหัสเวลาลิงก์ดังนั้นจึงสูญเสียการเพิ่มประสิทธิภาพที่เป็นไปได้

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

DLL ที่โหลดล่าช้าอาจเป็นสิ่งที่คุณกำลังคิด:

http://msdn.microsoft.com/en-us/library/151kt790.aspx


อาฉันคิดว่าลิงค์เกอร์ก็ทำแบบนี้เสมอ! ดังนั้นการปิดincremental linkingจะทำให้ลิงค์เกอร์เชื่อมโยงทุกอย่างตั้งแต่ต้นทุกครั้งหรือไม่?
Russel

6
"ในทางปฏิบัติผลของสิ่งนี้ไม่น่าเป็นห่วง" อาจเป็นเรื่องที่ควรค่าแก่การกล่าวถึงว่าในขณะที่ความแตกต่างระหว่างการเชื่อมโยงแบบ "ปกติ" และการเชื่อมโยงแบบเพิ่มหน่วยอาจไม่ใช่ประสิทธิภาพที่ยอดเยี่ยมในขณะรันไทม์ แต่การเชื่อมโยงแบบเพิ่มหน่วยไม่เข้ากันกับการสร้างรหัสเวลาลิงก์ซึ่งสามารถสร้างความแตกต่างด้านประสิทธิภาพได้อย่างมาก
Logan Capaldo

2
@ รัสเซล: ใช่แล้ว @Logan: ขอบคุณฉันได้อัปเดตคำตอบแล้ว
Saxon Druce

นั่นหมายความว่าเราควรปิดตัวเลือกนี้สำหรับการสร้างการผลิตหรือไม่?
RBT

1
@RBT ใช่คุณต้อง
อาจาย์

15

นอกจากนี้ที่สำคัญมากลิงค์ที่เพิ่มขึ้นเป็นข้อกำหนดเบื้องต้นสำหรับEdit&Continue- สามารถแก้ไขโค้ดของคุณและคอมไพล์ใหม่ได้ทันทีโดยไม่ต้องรีสตาร์ท

ดังนั้นจึงเป็นสิ่งที่ดีที่จะมีในการสร้างดีบัก แต่ไม่ใช่รุ่นที่เผยแพร่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.