"Liên kết gia tăng" là gì?


105

Tôi đã xem MSDN của Microsoft và trên khắp các trang web, nhưng tôi vẫn chưa thể biết được nó là gì.

Nó có nghĩa là chương trình đã hoàn thành tải các tệp DLL vào những thời điểm khác nhau trong quá trình thực thi, như được áp dụng cho tất cả cùng một lúc khi khởi chạy?

Tôi hoàn toàn có đường lối? :)


1
Tôi đã thêm câu trả lời cho GNU ld nhưng nó đã bị xóa, đây là câu trả lời tương tự: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Nó đã bị xóa vì Copy, Paste và Diverge kém - cho dù nội dung có tốt đến đâu đi nữa en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Câu trả lời:


122

Liên kết bao gồm việc đóng gói tất cả các tệp .obj được xây dựng từ các tệp nguồn của bạn, cũng như bất kỳ tệp .lib nào mà bạn tham chiếu, vào đầu ra của bạn (ví dụ: .exe hoặc .dll).

Nếu không có liên kết gia tăng, điều này phải được thực hiện từ đầu mỗi lần.

Liên kết tăng dần liên kết exe / dll của bạn theo cách giúp trình liên kết cập nhật exe / dll hiện có dễ dàng hơn khi bạn thực hiện một thay đổi nhỏ và biên dịch lại.

Vì vậy, liên kết gia tăng chỉ giúp biên dịch và liên kết dự án của bạn nhanh hơn.

Hiệu ứng thời gian chạy duy nhất mà nó có thể có là nó có thể làm cho exe / dll của bạn lớn hơn và chậm hơn một chút, như được mô tả ở đây:

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

Chỉnh sửa: Như đã đề cập bởi Logan, liên kết gia tăng cũng không tương thích với việc tạo mã thời gian liên kết - do đó làm mất khả năng tối ưu hóa hiệu suất.

Bạn có thể muốn sử dụng liên kết gia tăng cho các bản dựng gỡ lỗi để tăng tốc độ phát triển, nhưng hãy tắt nó cho các bản dựng phát hành để cải thiện hiệu suất thời gian chạy.

Các tệp DLL được tải chậm có thể là điều bạn đang nghĩ đến:

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


Ah, tôi nghĩ rằng những người liên kết luôn luôn làm điều này! Vì vậy, tắt incremental linkingsẽ làm cho trình liên kết liên kết mọi thứ lại từ đầu?
Russel

6
"Trên thực tế, ảnh hưởng của điều này có lẽ không đáng lo ngại." Điều đáng nói là mặc dù sự khác biệt giữa liên kết "bình thường" và liên kết gia tăng có thể không phải là hiệu suất tuyệt vời trong thời gian chạy, nhưng liên kết gia tăng không tương thích với việc tạo mã thời gian liên kết có thể tạo ra sự khác biệt đáng kể về hiệu suất.
Logan Capaldo

2
@Russel: Vâng, nó sẽ. @Logan: Cảm ơn, tôi đã cập nhật câu trả lời của mình.
Saxon Druce

Vì vậy, điều đó có nghĩa là chúng ta nên tắt tùy chọn này cho các bản dựng sản xuất?
RBT

1
@RBT, vâng bạn phải.
Ajay

15

Ngoài ra, khá quan trọng, liên kết gia tăng là điều kiện tiên quyết để Edit&Continue- có thể chỉnh sửa mã của bạn và biên dịch lại một cách nhanh chóng mà không cần khởi động lại.

Vì vậy, nó là một điều tốt để có trên các bản dựng gỡ lỗi, nhưng không phát hành các bản dựng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.