Apa itu “incremental linking”?


105

Saya telah melihat MSDN Microsoft dan di seluruh web, tetapi saya masih belum bisa mendapatkan ide yang bagus tentang apa itu.

Apakah ini berarti program yang telah selesai memuat DLL pada waktu yang berbeda selama eksekusinya, seperti yang diterapkan sekaligus pada saat peluncuran?

Apakah saya benar-benar salah? :)


1
Saya menambahkan jawaban untuk GNU ld tetapi telah dihapus, berikut ini yang serupa: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Itu dihapus karena Salin, Tempel, dan Diverge itu buruk - tidak peduli seberapa bagus kontennya en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Jawaban:


122

Menautkan melibatkan pengemasan bersama semua file .obj yang dibuat dari file sumber Anda, serta file .lib apa pun yang Anda referensikan, ke dalam output Anda (misalnya .exe atau .dll).

Tanpa incremental linking, ini harus dilakukan dari awal setiap saat.

Tautan tambahan menautkan exe / dll Anda sedemikian rupa sehingga lebih mudah bagi linker untuk memperbarui exe / dll yang ada saat Anda membuat perubahan kecil dan melakukan kompilasi ulang.

Jadi, penautan tambahan hanya membuatnya lebih cepat untuk menyusun dan menautkan proyek Anda.

Satu-satunya efek runtime yang mungkin dimilikinya adalah itu mungkin membuat exe / dll Anda sedikit lebih besar dan lebih lambat, seperti yang dijelaskan di sini:

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

Sunting: Seperti yang disebutkan oleh Logan, penautan inkremental juga tidak kompatibel dengan pembuatan kode waktu tautan - oleh karena itu kehilangan kemungkinan pengoptimalan kinerja.

Anda mungkin ingin menggunakan penautan inkremental untuk build debug guna mempercepat pengembangan, tetapi nonaktifkan untuk build rilis guna meningkatkan performa runtime.

Penundaan dimuat DLL mungkin apa yang Anda pikirkan:

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


Ah, saya pikir linker selalu melakukan ini! Jadi, mematikan incremental linkingakan membuat linker menautkan semuanya dari awal setiap kali?
Russel

6
"Dalam praktiknya, efek ini mungkin tidak perlu dikhawatirkan." mungkin perlu disebutkan bahwa meskipun perbedaan antara penautan "normal" dan penautan inkremental mungkin tidak terlalu bagus dalam hal kinerja saat berjalan, penautan inkremental tidak kompatibel dengan pembuatan kode waktu tautan yang dapat membuat perbedaan kinerja yang drastis.
Logan Capaldo

2
@Russel: Ya itu akan. @Logan: Terima kasih, saya telah memperbarui jawaban saya.
Saxon Druce

Jadi, apakah itu berarti kita harus mematikan opsi ini untuk produksi build?
NSP

1
@RBT, ya harus.
Ajay

15

Juga, yang cukup penting, tautan inkremental merupakan prasyarat untuk Edit&Continue- mengedit kode Anda dan mengkompilasinya dengan cepat, tanpa harus memulai ulang.

Jadi, ada baiknya untuk memiliki build debug, tetapi tidak merilis build.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.