6

Tôi hiện sử dụng tiền xử lý sau định nghĩa, và các thiết lập tối ưu hóa khác nhau:C++ định nghĩa cho một 'tốt hơn' chế độ Release xây dựng trong VS

  • WIN32_LEAN_AND_MEAN
  • VC_EXTRALEAN
  • NOMINMAX
  • _CRT_SECURE_NO_WARNINGS
  • _SCL_SECURE_NO_WARNINGS
  • _SECURE_SCL = 0
  • _HAS_ITERATOR_DEBUGGING = 0

Câu hỏi của tôi là những gì những thứ khác làm SOers đồng sử dụng, bổ sung, xác định, để có được một phát hành Chế độ xây dựng từ VS C++ (2008,2010) để được như performant càng tốt?

btw, tôi đã thử PGO vv, nó giúp một chút nhưng không có gì đến tính chẵn lẻ với GCC, tôi cũng không sử dụng luồng, C++ tôi đang nói về nó giống như C nhưng sử dụng mẫu và các thuật toán STL, vv

khi đứng tại đoạn mã rất đơn giản nhạt trong hoạt động wrt so sánh khi so sánh với những gì GCC sản xuất trên nói một máy x86 tương đương chạy linux (2.6+ kernel) sử dụng 02.

Side-Note: Tôi tin rằng rất nhiều vấn đề liên quan trực tiếp đến phiên bản STL (Dinkum) do MS cung cấp. Mọi người có thể xin vui lòng xây dựng trên kinh nghiệm sử dụng STLPort vv với VS C + +.

+0

Bạn cũng nên liệt kê các cài đặt bạn đã chỉ định trong thuộc tính dự án của bạn theo C/C++, Tối ưu hóa và cũng có thể trong C/C++, Code Generation, vì chúng có thể ảnh hưởng lớn đến tối ưu hóa trình biên dịch sẽ thực hiện. –

+0

Hầu hết những người không có tác động đến hiệu suất, nhưng chỉ đơn giản là loại bỏ cảnh báo hoặc tăng tốc biên dịch. Dù sao, theo kinh nghiệm của tôi, VC++ và GCC sản xuất mã hoạt động tốt như nhau. Làm thế nào lớn một sự khác biệt là bạn nhìn thấy, và chính xác như thế nào là mỗi trình biên dịch gọi? – jalf

+0

Đây không phải là hiệu suất liên quan, nhưng bạn nên xem xét sử dụng 'bị cấm.h' từ SDL của Microsoft cho một ứng dụng Win32. – 0xC0000022L

Trả lời

1

Tôi không thấy như thế nào sự bao gồm của:

_CRT_SECURE_NO_WARNINGS 
_SCL_SECURE_NO_WARNINGS 

..gives quý khách tốt hơn hoặc hơn performant xây dựng. Tất cả những gì bạn đang làm là vô hiệu hóa các cảnh báo về các hàm không được chấp nhận của MS CRT. Nếu bạn đang làm điều này bởi vì bạn biết những gì bạn đang làm và yêu cầu nền tảng mã bất khả tri tốt, nếu không tôi sẽ xem xét lại.

CẬP NHẬT: Hơn nữa trình biên dịch chỉ có thể thực hiện rất nhiều. Tôi đặt cược bạn sẽ nhận được mã hiệu suất cao hơn nếu bạn thiết kế và sửa các điểm nóng hiện có của bạn thay vì cố gắng để eek tỷ lệ phần trăm nhỏ (nếu đó) đạt được từ giai đoạn biên dịch và liên kết.

UPDATE2: _HAS_ITERATOR_DEBUGGING không thể được sử dụng khi biên soạn bản phát hành theo bất kỳ MSDN. WIN32_LEAN_AND_MEANVC_EXTRALEAN (và có lẽ là NOMINMAX mặc dù hiệu suất không phải là lý do chính để vô hiệu hóa điều này) có thể cung cấp cho bạn một số hiệu suất tăng mặc dù tất cả phần còn lại đều có giá trị đáng ngờ. Bạn nên ưu tiên sửa mã nhanh chính xác (có thể là - và tôi có thể nhấn mạnh) có thể nhanh hơn nhưng có nhiều rủi ro hơn.

+1

Tôi đồng ý hoàn toàn, nhưng tôi phải thêm người biểu diễn đó KHÔNG phải là một từ. –

+2

Trong trường hợp không có từ thích hợp hơn thì nhà ngôn ngữ học nổi loạn sẽ làm gì? Cuối cùng, các bộ từ điển sẽ bắt đầu. :-) (Theo Jeff Boulter anyway) – Konrad

+2

@Charles: Theo Dictionary.com, nó được. Đó là một người biểu diễn giống như một người cung cấp thông tin là một người cung cấp thông tin. Tuy nhiên, tôi nghĩ đây là một từ phù hợp hơn để thể hiện khái niệm và, sau cùng thì, các từ điển tiếng Anh mang tính mô tả hơn là mô tả. –