Teknikleri C derleme sürelerini hızlandırmak için neler yapılabilir?
Teknikleri C derleme sürelerini hızlandırmak için neler yapılabilir?
Bu soru biraz yorum Yığın Taşması soru geldiC programming styleorada ne duymak ilgileniyorum.
İlgili bir soru gördümWhy does C compilation take so long?birçok çözüm sağlamaz ama.
Vote here have Visual Studio support sharing precompiled headers between projects
CEVAP
Dil teknikleri
Pimpl Deyimi
Bu bir göz atınPimpl idiomhere here, aynı zamanda bir olarak bilinen opaque pointer veya kolu sınıflar. Sadece derleme hızlandırmak, non-throwing swap fonksiyonu ile birlikte özel güvenlik artar. Pimpl deyimi Başlıkları arasındaki bağımlılıkları azaltmak ve yapılması gereken tanımlanması miktarını azaltır sağlar.
İleri Bildirimleri
Mümkün olan her yerde kullanın forward declarations. Eğer derleyici sadece SomeIdentifier
yapı veya bir işaretçi ya, tüm tanımına dahil değil ne bilmek gerekiyorsa, daha fazla iş yapmak için derleyici zorlamak gerekiyor. Bu bir dalgalanma, bu şekilde olması gerekenden daha yavaş yapma.
I/O akışları özellikle inşa yavaşlatmak için bilinmektedir. Eğer header dosyasına ihtiyacınız varsa, deneyin #<iosfwd>
yerine <iostream>
dahil ve #uygulama <iostream>
Başlığı tek dosya vardır. <iosfwd>
Başlığı öne tanımlamalar de geçerlidir. Ne yazık ki diğer standart başlıklar ile ilgili tanımlamalar bir başlık yok.
Referans ile pass-by-value fonksiyonu imzalar için tercih. Bu ihtiyacı ortadan kaldırır #başlığındaki tanımlar, ilgili dosya türü vardır ve sadece ileri-ilan tipi gerekir. Tabii ki, belirsiz hataları önlemek için olmayan sabit referanslar için sabit referanslar tercih ederim, ama bu başka bir soru için bir konu.
Koruma Koşulları
Koruma şartları bir kez daha tek bir çeviri birimi dahil olmaktan başlık dosyaları tutmak için kullanın.
#pragma once
#ifndef filename_h
#define filename_h
// Header declarations / definitions
#endif
Kullanarak hem pragma ve ifndef, elde taşınabilirlik Ovası makro çözüm olarak derleme hızı optimizasyonu bazı Derleyiciler yapabilirim içinde varlığı pragma once
Yönerge.
Karşılıklı bağımlılığı azaltmak
Daha modüler ve daha az bağımlı kod tasarımı genel olarak, daha az sıklıkta her şey yeniden olacak. Ayrıca derleyici daha az izlemek için sahip olması sayesinde aynı zamanda herhangi bir bireysel blok, yapmak zorunda iş miktarını azaltmak sona erebilir.
Derleyici seçenekleri
Önceden Derlenmiş Bir Üstbilgi
Bu kez birçok çeviri birimleri dahil başlıkları ortak bir bölüm derlemek için kullanılır. Derleyici bir kere derler ve kendi iç durumunu kaydeder. Bu devlet sonra hızlı bir şekilde başlıkları ile aynı seti ile başka bir dosya derleme bir başlangıç yapmak yüklenebilir.
Sadece önceden derlenmiş başlıkları nadiren değişen şeyler vardır, ya da tam bir yeniden yapmak daha bitebileceğini dikkat edin. Bu STL başlıklar için iyi bir yerdir ve diğer kütüphane dosyalarını içerir.
ccache teknikleri hızlandırmak için önbelleğe alma yararlanır başka bir araçtır.
Paralellik Kullanın
Pek çok Derleyiciler / çoklu çekirdeği kullanarak/CPU derleme aynı anda yapmak için destek Olduğun için. GNU Make (genellikle GCC ile kullanılır), -j [N]
seçeneğini kullanın. Visual Studio, paralel tercihleri birden fazla proje oluşturmak için izin altında bir seçenek var. Ayrıca dosya düzeyinde paralellism yerine sadece düzey proje paralellism /MP
option kullanabilirsiniz.
Diğer paralel kamu hizmetleri:
Optimizasyon daha Düşük bir Seviyede kullanın
Daha derleyici optimize etmek için çalışır, daha fazla çalışması gerekiyor.
Paylaşılan Kitaplıklar
Kütüphaneler içine az sık sık değiştirilmiş kodu hareketli derleme zamanı azaltabilir. Paylaşılan kitaplıkları kullanarak (.so
.dll
), bağlama zamanı da azaltabilirsiniz.
Daha Hızlı bir Bilgisayar almak
Daha fazla RAM, daha hızlı sabit diskler (SSD dahil) ve daha fazla İşlemci/çekirdek derleme hızında bir fark yaratacak.
Nasıl azaltmak için inşa kez böyle büy...
Ne zaman şablonları bir sürü ile)derle...
Teknikleri JavaScript bir sınıf tanıml...
Nasıl derleme bağlama hatası günlük (F...
'ek yapılandırma' başvuru iç...