2010-06-23 26 views
19

hôm nay tôi phát hiện ra rằng thư viện tĩnh đã biên dịch tôi đang làm việc lớn hơn nhiều ở chế độ Release so với Gỡ lỗi. Tôi thấy nó rất đáng ngạc nhiên, vì phần lớn thời gian ngược lại xảy ra (theo như tôi có thể nói).Chế độ phát hành thư viện tĩnh lớn hơn nhiều so với phiên bản chế độ gỡ lỗi

Kích thước trong chế độ gỡ lỗi nhỏ hơn 3 MB (một dự án khá lớn), nhưng trong bản phát hành, nó lên đến 6,5 MB. Ai đó có thể cho tôi biết điều gì có thể là lý do cho điều này? Tôi đang sử dụng các thiết lập Visual Studio (2008) thông thường cho một dự án thư viện tĩnh, thay đổi hầu như không có gì trong các thiết lập cấu hình xây dựng. Trong bản phát hành, tôi đang sử dụng/O2 và "Kích thước hoặc tốc độ ưu tiên" được đặt thành "Không". Có thể/O2 ("Tối đa hóa tốc độ") gây ra cuối cùng .lib được lớn hơn rất nhiều so với phiên bản gỡ lỗi với tất cả các thông tin gỡ lỗi trong nó?

EDIT: Thông tin thêm:
gỡ lỗi:
- toàn tối ưu hóa chương trình: Không
- cho phép mức độ chức năng liên kết: Không

phát hành:
- toàn tối ưu hóa chương trình: Kích hoạt tính năng liên kết thời gian tạo mã
- cho phép liên kết cấp chức năng: Có

+1

gì về "tối ưu hóa toàn bộ chương trình" và "chức năng cấp liên kết" Cài đặt ở cả hai cấu hình? – sharptooth

+0

Đã cập nhật thông tin. – PeterK

Trả lời

28

Sự khác biệt này đặc biệt do tạo mã thời gian liên kết. Đọc chương Link-Time Code Generation trong Compilers - What Every Programmer Should Know About Compiler Optimizations trên MSDN - về cơ bản nói rằng với LTCG bật trình biên dịch tạo ra nhiều dữ liệu hơn được đóng gói vào thư viện tĩnh sao cho trình liên kết có thể sử dụng thêm dữ liệu đó để tạo mã máy tốt hơn liên kết tệp thực thi.

Vì bạn đã tắt LTCG trong cấu hình Gỡ lỗi nên thư viện được sản xuất nhỏ hơn đáng kể vì nó không có dữ liệu bổ sung đó.

PS: Original Link (not working at 11/09/2015)

+3

Cảm ơn bạn, điều này đã giải thích rất nhiều! – PeterK

0

Cá nhân tôi chưa bao giờ thấy một relea se PDB lớn hơn một PDB gỡ rối. Cùng một thỏa thuận cho LIBs.

1

Việc tối ưu hóa có thể là vấn đề ở đây, đặc biệt là các chức năng inline được tạo tự động sẽ lớn hơn nhưng nhanh hơn trong bản phát hành hơn là gỡ lỗi.

Các vấn đề liên quan