"Artımlı bağlantı" nedir?


105

Microsoft'un MSDN'e ve web'in her yerine baktım, ancak hala ne olduğu hakkında gerçekten iyi bir fikir edinemedim.

Tamamlanan programın, başlatma sırasında aynı anda uygulandığı şekilde, DLL'leri yürütme sırasında farklı zamanlarda yüklediği anlamına mı geliyor?

Ben tamamen kapalı mıyım? :)


1
GNU ld için bir cevap ekledim ancak silindi, işte buna benzer: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Kopyala, Yapıştır ve Farklılaştır kötü olduğu için silindi - içerik ne kadar iyi olursa olsun en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Yanıtlar:


122

Bağlama, kaynak dosyalarınızdan oluşturulan tüm .obj dosyalarının yanı sıra referans verdiğiniz tüm .lib dosyalarını çıktınızda (örn. .Exe veya .dll) birlikte paketlemeyi içerir.

Artımlı bağlantı olmadan, bunun her seferinde sıfırdan yapılması gerekir.

Artımlı bağlantı, exe / dll'nizi, küçük bir değişiklik yapıp yeniden derlediğinizde bağlayıcının mevcut exe / dll'yi güncellemesini kolaylaştıracak şekilde bağlar.

Dolayısıyla, artımlı bağlantı, projenizi derlemeyi ve bağlamayı daha hızlı hale getirir.

Sahip olabileceği tek çalışma zamanı etkisi, burada anlatıldığı gibi exe / dll'nizi biraz daha büyük ve daha yavaş hale getirmesidir:

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

Düzenleme: Logan tarafından belirtildiği gibi, artımlı bağlantı, bağlantı zaman kodu oluşturma ile de uyumsuzdur - bu nedenle olası bir performans optimizasyonunu kaybeder.

Geliştirmeyi hızlandırmak için hata ayıklama yapıları için artımlı bağlantı kullanmak isteyebilir, ancak çalışma zamanı performansını iyileştirmek için sürüm yapıları için devre dışı bırakabilirsiniz.

Gecikmeli yüklenen DLL'ler, düşündüğünüz şey olabilir:

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


Ah, ben bağlayıcıların bunu her zaman yaptığını sanıyordum! Yani, kapatmak incremental linking, bağlayıcıyı her seferinde sıfırdan bağlayacak mı?
Russel

6
"Pratikte bunun etkisi muhtemelen endişelenmeye değmez." Muhtemelen belirtmek gerekir ki, "normal" bağlantı ile artımlı bağlantı arasındaki fark, çalışma zamanında o kadar büyük performans açısından akıllıca olmasa da, artımlı bağlamanın bağlantı zaman kodu oluşturma ile uyumsuz olduğunu ve bu da büyük bir performans farkı yaratabilir.
Logan CAPALDO

2
@Russel: Evet olacak. @Logan: Teşekkürler, cevabımı güncelledim.
Saxon Druce

Bu, üretim yapıları için bu seçeneği kapatmamız gerektiği anlamına mı geliyor?
RBT

1
@RBT, evet yapmalısın.
Ajay

15

Ayrıca, çok daha önemlisi, artımlı bağlantı, Edit&Continuekodunuzu düzenlemek ve yeniden başlatmadan anında yeniden derlemek için bir ön koşuldur .

Bu nedenle, hata ayıklama yapılarına sahip olmak iyi bir şeydir, ancak sürüm yapıları değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.