Tôi có một dự án sử dụng khá nhiều mẫu lập trình C++. Điều này làm cho thời gian biên dịch dài. Tôi hiểu rằng tôi không thể có bánh và ăn nó nhưng tôi muốn biết một số lời khuyên và thủ thuật về làm thế nào để giảm thời gian biên dịch. Tôi đã thử các instantiations rõ ràng và trong khi điều đó có thể giúp trong một số trường hợp, rất nhiều lần, các cá thể là duy nhất đối với một đơn vị biên dịch cụ thể trong trường hợp instantiation instantiation không có gì để trợ giúp. Và bây giờ chúng ta chỉ nói về Clang, một công việc khá tốt. Khi tôi thử điều này trên G ++, thời gian biên dịch chỉ phát nổ. Đối với một tập tin, tôi đã từ bỏ việc chờ nó biên dịch sau 45 phút.Thủ phạm phổ biến cho sự chậm trễ TMP
- Có thủ phạm phổ biến nào khi nói đến lập trình meta mẫu hay không, những thứ thường được biết là có vấn đề? Tôi nên tránh những kỹ thuật nào và tôi nên làm gì?
- Có khu vực nào mà GCC được biết là hoạt động kém hơn Clang và có cách nào để giải quyết vấn đề này không?
Tôi đang sử dụng hầu hết các kỹ thuật vani C++ 11 thuần túy, tôi không sử dụng Boost MPL hoặc các thư viện tương tự.
Thật không may, đây là những điều tôi đã làm. Một số điều mà tôi tìm thấy thực sự tăng thời gian biên dịch đã được sử dụng của tôi 'std :: make_shared' và' std :: shared_ptr'. Tôi đã thay thế bằng cách tính toán tham chiếu của riêng tôi bằng cách sử dụng 'std :: atomic' vì tôi đã xóa kiểu xóa. –
@EmilEriksson Có thể vẫn sử dụng 'std :: shared_ptr' và không nhận được quá nhiều chi phí bổ sung http://blog2.emptycrate.com/content/template-code-bloat-revisited-smaller-makeshared – lefticus
Trong trường hợp này, thậm chí nếu tôi giảm số lượng các cảnh báo 'std :: shared_ptr', tôi vẫn sẽ có quá nhiều điểm trong số đó và' std :: shared_ptr' tốn nhiều thời gian hơn so với triển khai của riêng tôi. Tất nhiên, nó là tốn kém cho một lý do chính đáng, sự linh hoạt là cần thiết cho một lớp thư viện chuẩn sẽ được sử dụng ở khắp mọi nơi. Nhưng tôi có một trường hợp sử dụng rất cụ thể và do đó, tôi đã có thể giảm thời gian biên dịch bằng cách sử dụng một giải pháp khác. –