SORU
16 Aralık 2008, Salı


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
16 Aralık 2008, Salı


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C++

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Barnacules Nerdgasm

    Barnacules N

    20 Temmuz 2006
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • NightShader1

    NightShader1

    25 Temmuz 2006