C ++ derlemesi neden bu kadar uzun sürüyor?


540

Bir C ++ dosyasını derlemek, C # ve Java ile karşılaştırıldığında çok uzun zaman alır. C ++ dosyasını derlemek normal boyutta bir Python betiği çalıştırmaktan çok daha uzun sürer. Şu anda VC ++ kullanıyorum ama herhangi bir derleyici ile aynı. Bu neden?

Düşünebilmemizin iki nedeni, başlık dosyalarını yüklemek ve önişlemciyi çalıştırmaktı, ancak bu neden bu kadar uzun sürdüğünü açıklamıyor gibi görünmüyor.


58
VC ++ önceden derlenmiş başlıkları destekler. Onları kullanmak yardımcı olacaktır. Çok.
Brian

1
Evet benim durumumda (çoğunlukla birkaç sınıflı C - şablon yok) önceden derlenmiş başlıklar yaklaşık 10x hızlanır
Lothar

@Brian asla bir kütüphanede önceden derlenmiş bir kafa kullanmazdım
Cole Johnson

13
It takes significantly longer to compile a C++ file- 1 saniyeye kıyasla 2 saniye mi demek istediniz? Kesinlikle bu iki kat daha uzun, ama pek önemli değil. Yoksa 5 saniyeye kıyasla 10 dakika mı demek istediniz? Lütfen miktarını belirtin.
Nick Gammon

2
Bahsimi modüller üzerine koydum; C ++ projelerinin sadece programlama ile diğer programlama dillerinden daha hızlı inşa edilmesini beklemiyorum, ancak bazı yönetim ile projelerin çoğu için gerçekten yakın olabilir. Modüllerden sonra yapay entegrasyon ile iyi bir paket yöneticisi görmeyi umuyorum
Abdurrahim

Yanıtlar:


800

Birkaç neden

Başlık dosyaları

Her bir derleme birimi yüzlerce hatta binlerce başlığın (1) yüklenmesini ve (2) derlenmesini gerektirir. Her biri tipik önişlemci olmasını sağlar kafayla derleme sonucu olduğunu, çünkü her derleme birimi için yeniden derlenmesi gereken olabilir her derleme birimine arasında değişmektedir. (Bir derleme biriminde başlık içeriğini değiştiren bir makro tanımlanabilir).

Bu muhtemelen her derleme birimi için derlenmiş kod büyük miktarda gerektirir ve ayrıca, her başlık (bunu içeren her derleme birimi için bir kez) birden çok kez derlenmiş zorundadır olarak, ana nedeni.

bağlayıcı

Derlendiğinde, tüm nesne dosyalarının birbirine bağlanması gerekir. Bu temelde çok iyi paralelleştirilemeyen ve tüm projenizi işlemek zorunda olan monolitik bir süreçtir.

ayrıştırma

Sözdiziminin ayrıştırılması son derece karmaşıktır, büyük ölçüde bağlama bağlıdır ve ayrıştırılması çok zordur. Bu çok zaman alıyor.

Şablonlar

C # 'da, List<T>programınızda kaç Liste örneği olursa olsun derlenen tek türdür. C ++ 'da, vector<int>tamamen ayrı bir türdür vector<float>ve her birinin ayrı olarak derlenmesi gerekecektir.

Buna, şablonların derleyicinin yorumlaması gereken tam bir Turing-complete "alt dili" oluşturduğunu ve bu gülünç derecede karmaşık hale gelebileceğini ekleyin. Nispeten basit şablon meta programlama kodu bile onlarca ve düzinelerce şablon örneği oluşturan özyinelemeli şablonlar tanımlayabilir. Şablonlar, bağlayıcıya çok fazla ek iş ekleyerek gülünç derecede uzun adlara sahip son derece karmaşık türlerle de sonuçlanabilir. (Birçok sembol ismini karşılaştırmak zorundadır ve eğer bu isimler binlerce karaktere dönüşebiliyorsa, bu oldukça pahalı hale gelebilir).

Ve elbette, başlık dosyalarıyla ilgili sorunları daha da kötüleştirirler, çünkü şablonların genellikle başlıklarda tanımlanması gerekir, bu da her derleme birimi için çok daha fazla kodun ayrıştırılması ve derlenmesi gerektiği anlamına gelir. Düz C kodunda, başlık genellikle yalnızca ileri bildirimler içerir, ancak çok az gerçek kod içerir. C ++ 'da, hemen hemen tüm kodların başlık dosyalarında bulunması nadir değildir.

Optimizasyon

C ++ bazı çok etkileyici optimizasyonlara izin verir. C # veya Java sınıfların tamamen ortadan kaldırılmasına izin vermez (yansıma amacıyla orada olmaları gerekir), ancak basit bir C ++ şablon metaprogramı bile, hepsi optimizasyonda tekrar satır içi ve elimine edilen düzinelerce veya yüzlerce sınıf oluşturabilir. evre.

Ayrıca, bir C ++ programı derleyici tarafından tamamen optimize edilmelidir. AC # programı yükleme zamanında ek optimizasyonlar yapmak için JIT derleyicisine güvenebilir, C ++ böyle bir "ikinci şans" alamaz. Derleyicinin ürettiği, alacağı kadar optimize edilmiştir.

makine

C ++, bayt kodu Java veya .NET kullanımından (özellikle x86 durumunda) biraz daha karmaşık olabilecek makine koduna derlenmiştir. (Bu tamlıktan sadece yorumlarda bahsedildiği için bahsedilmektedir. Uygulamada, bu adımın toplam derleme süresinin küçük bir kısmından fazlasını alma olasılığı düşüktür).

Sonuç

Bu faktörlerin çoğu, aslında oldukça verimli bir şekilde derlenen C kodu ile paylaşılmaktadır. Ayrıştırma adımı C ++ 'da çok daha karmaşıktır ve önemli ölçüde daha fazla zaman alabilir, ancak ana suçlu muhtemelen şablonlardır. Yararlılar ve C ++ 'ı çok daha güçlü bir dil yapıyorlar, ancak derleme hızı açısından da ücret alıyorlar.


38
Nokta 3 ile ilgili olarak: C derlemesi C ++ 'dan belirgin şekilde daha hızlıdır. Kod oluşumuna değil, yavaşlamaya neden olan ön uç kesinlikle.
Tom

72
Şablonlarla ilgili olarak: sadece <int> vektörü <double> vektöründen ayrı olarak derlenmemeli, aynı zamanda <int> vektörü onu kullanan her derleme biriminde yeniden derlenmelidir. Gereksiz tanımlamalar bağlayıcı tarafından ortadan kaldırılır.
David Rodríguez - dribeas

15
dribeas: Doğru, ancak şablonlar için spesifik değil. Satır içi işlevler veya başlıklarda tanımlanan başka bir şey, dahil edildiği her yerde yeniden derlenecektir. Ama evet, bu özellikle şablonlarla acı veriyor. :)
jalf

15
@configurator: Visual Studio ve gcc'nin her ikisi de önceden derlenmiş başlıklara izin verir, bu da derlemeye bazı ciddi hızlandırmalar getirebilir.
small_duck

5
DEBUG derlemelerimizin aslında yayın modu derlemesinden daha yavaş olduğu için optimizasyonun sorun olup olmadığından emin değilim. PDB nesli aynı zamanda bir suçludur.
gast128

40

Yavaşlama, herhangi bir derleyici için aynı değildir.

Delphi veya Kylix'i kullanmadım ama MS-DOS günlerinde, eşdeğer Turbo C ++ programı sadece tararken, bir Turbo Pascal programı neredeyse anında derlenecekti.

İki ana fark çok güçlü bir modül sistemi ve tek geçişli derlemeye izin veren bir sözdizimiydi.

Derleme hızının C ++ derleyici geliştiricileri için bir öncelik olmaması kesinlikle mümkündür, ancak C / C ++ sözdiziminde işlenmeyi daha da zorlaştıran bazı doğal komplikasyonlar da vardır. (C konusunda uzman değilim, ancak Walter Bright ve çeşitli ticari C / C ++ derleyicileri oluşturduktan sonra D dilini yarattı. Değişikliklerinden biri , dilin ayrıştırılmasını kolaylaştırmak için bağlamsız bir gramer uygulamaktı. .)

Ayrıca, genellikle Makefiles'ın her dosyanın C'de ayrı olarak derleneceği şekilde ayarlandığını fark edersiniz, bu nedenle 10 kaynak dosyanın tümü aynı içerme dosyasını kullanırsa, bu dosya 10 kez işlenir.


38
Pascal'ı karşılaştırmak ilginç, çünkü Niklaus Wirth, derleyicinin dillerini ve derleyicilerini tasarlarken kendisini bir kıyaslama olarak derlemek için harcadığı zamanı kullandı. Hızlı sembol araması için bir modülü dikkatlice yazdıktan sonra, basit bir doğrusal arama ile değiştirdiğinden, azaltılmış kod boyutu derleyicinin kendisini daha hızlı derlemesini sağladı.
Dietrich Epp

1
@DietrichEpp Deneycilik karşılığını verir.
Tomas Zubiri

39

Ayrıştırma ve kod oluşturma aslında oldukça hızlıdır. Asıl sorun dosyaları açmak ve kapatmak. Unutmayın, içerme korumalarıyla bile, derleyici hala .H dosyasını açar ve her satırı okur (ve sonra yoksay).

Bir arkadaş bir kez (iş yerinde sıkılmışken), şirketinin başvurusunu aldı ve her şeyi - tüm kaynak ve başlık dosyaları - büyük bir dosyaya koydu. Derleme süresi 3 saatten 7 dakikaya düştü.


14
Dosya erişiminin bu konuda bir eli var ama jalf'ın dediği gibi, bunun ana nedeni başka bir şey olacak, yani davanızda tamamen düşen birçok, çok, çok (iç içe!) Başlık dosyasının tekrarlanan ayrışması olacak.
Konrad Rudolph

9
Bu noktada, arkadaşınızın önceden derlenmiş üstbilgileri ayarlaması, farklı üstbilgi dosyaları arasındaki bağımlılıkları kırması (diğerini içeren bir üstbilgiden kaçınmaya çalışın, ileri bildirimi yerine) ve daha hızlı bir HDD alması gerekir. Bu bir yana, oldukça şaşırtıcı bir ölçüm.
Tom Leys

6
Başlık dosyasının tamamı (olası yorumlar ve boş satırlar hariç) başlık korumaları içindeyse, gcc dosyayı hatırlayabilir ve doğru sembol tanımlanmışsa atlayabilir.
CesarB

11
Ayrıştırma çok önemli. Birbirine bağımlılığı olan benzer boyutlu kaynak / başlık dosyalarının N çiftleri için başlık dosyalarından O (N ^ 2) geçişleri vardır. Tüm metni tek bir dosyaya koymak, yinelenen ayrıştırma işlemini keser.
Tom

9
Küçük yan not: Kapatma korumaları, derleme birimi başına birden fazla ayrışmaya karşı koruma sağlar. Genel olarak birden fazla ayrışmaya karşı değil.
Marco van de Voort

16

Diğer bir neden, bildirimlerin yerini bulmak için C ön işlemcisinin kullanılmasıdır. Üstbilgi korumalarında bile, her dahil edildiklerinde .h yine de tekrar tekrar ayrıştırılmalıdır. Bazı derleyiciler, bu konuda yardımcı olabilecek önceden derlenmiş başlıkları destekler, ancak her zaman kullanılmazlar.

Ayrıca bkz: C ++ Sık Sorulan Yanıtlar


Yanıtınızın bu ÖNEMLİ kısmını belirtmek için önceden derlenmiş başlıklara yapılan yorumları cesur bir şekilde yazmanız gerektiğini düşünüyorum.
Kevin

6
Başlık dosyasının tamamı (olası yorumlar ve boş satırlar hariç) başlık korumaları içindeyse, gcc dosyayı hatırlayabilir ve doğru sembol tanımlanmışsa atlayabilir.
CesarB

5
@CesarB: Her derleme birimi (.cpp dosyası) başına bir kez tam olarak işlenmesi gerekir.
Sam Harwell

16

C ++ makine kodunda derlenmiştir. Böylece, ön işlemciye, derleyiciye, optimize ediciye ve son olarak montajcıya sahip olmanız gerekir.

Java ve C #, bayt kodu / IL'de derlenir ve yürütülmeden önce Java sanal makinesi / .NET Framework yürütülür (veya JIT makine kodunda derlenir).

Python, bayt koduna da derlenmiş, yorumlanan bir dildir.

Bunun da başka nedenleri olduğuna eminim, ancak genel olarak, yerel makine dilini derlemek zorunda kalmamak zaman kazandırır.


15
Ön işleme ile eklenen maliyet önemsizdir. Yavaşlamanın başlıca "diğer nedeni", derlemenin ayrı görevlere (nesne dosyası başına bir tane) ayrılmasıdır, bu nedenle ortak başlıklar tekrar tekrar işlenir. O (N ^ 2) en kötü durum, diğer çoğu dil O (N) ayrıştırma zamanı.
Tom

12
Aynı argümandan C, Pascal vb derleyicilerin yavaş olduğunu söyleyebilirsin, bu ortalama olarak doğru değil. C ++ dilbilgisi ve bir C ++ derleyicisinin sürdürmesi gereken devasa durumla daha fazla ilgilidir.
Sebastian Mach

2
C yavaş. Kabul edilen çözümle aynı başlık ayrıştırma probleminden muzdariptir. Örneğin, birkaç derleme biriminde windows.h içeren basit bir Windows GUI programı alın ve (kısa) derleme birimleri eklerken derleme performansını ölçün.
Marco van de Voort

13

En büyük sorunlar:

1) Sonsuz başlık onarımı. Daha önce bahsedildi. Azaltıcı etkenler (#pragma gibi) genellikle derleme birimi başına değil derleme başına çalışır.

2) Takım zincirinin çoğu zaman, her çağrı için tüm durumu her zaman yeniden başlatması ve yeniden yüklemesi gereken birden fazla ikili dosyaya (marka, önişlemci, derleyici, montajcı, arşivleyici, impdef, bağlayıcı ve dlltool) ayrılması gerçeği ( derleyici, birleştirici) veya her iki dosya (arşivleyici, bağlayıcı ve dlltool).

Ayrıca comp.compilers hakkındaki bu tartışmaya bakın: http://compilers.iecc.com/comparch/article/03-11-078 özellikle bu:

http://compilers.iecc.com/comparch/article/02-07-128

Comp.compilers moderatörü John'un hemfikir gibi gözüktüğünü ve araç zincirini tam olarak bütünleştirir ve önceden derlenmiş başlıkları uygularsa, C için de benzer hızlara ulaşmanın mümkün olduğu anlamına geldiğini unutmayın. Birçok ticari C derleyicisi bunu bir dereceye kadar yapar.

Unix modelinin her şeyi ayrı bir ikili dosyaya çarpanlara ayırma modelinin Windows için en kötü durum modelidir (yavaş süreç oluşturma ile). Windows ve * nix arasındaki GCC oluşturma sürelerini karşılaştırırken, özellikle de make / configure sistemi de sadece bilgi almak için bazı programları çağırıyorsa çok dikkat çekicidir.


12

Bina C / C ++: gerçekten ne oluyor ve neden bu kadar uzun sürüyor

Yazılım geliştirme süresinin nispeten büyük bir kısmı kod yazmak, çalıştırmak, hata ayıklamak ve hatta tasarlamak için harcanmaz, ancak derlenmeyi bitirmesini bekler. İşleri hızlı hale getirmek için önce C / C ++ yazılımı derlendiğinde neler olduğunu anlamalıyız. Adımlar kabaca aşağıdaki gibidir:

  • Yapılandırma
  • Araç başlatma
  • Bağımlılık kontrolü
  • Derleme
  • bağlayıcı

Şimdi her bir adıma nasıl daha hızlı yapılabileceklerine odaklanarak daha ayrıntılı olarak bakacağız.

Yapılandırma

Bu, inşa etmeye başlarken ilk adımdır. Genellikle bir yapılandırma komut dosyası veya CMake, Gyp, SCons veya başka bir araç çalıştırmak anlamına gelir. Bu, çok büyük Autotools tabanlı yapılandırma komut dosyaları için bir saniyeden birkaç dakikaya kadar sürebilir.

Bu adım nispeten nadir görülür. Yalnızca yapılandırmaları değiştirirken veya derleme yapılandırmasını değiştirirken çalıştırılması gerekir. Değişen yapı sistemleri eksik olduğunda, bu adımı daha hızlı hale getirmek için yapılacak çok şey yoktur.

Araç başlatma

Bir IDE'deki (genellikle bir takma addır) derleme simgesini çalıştırdığınızda veya tıkladığınızda bu gerçekleşir. Derleme aracı ikili dosyası, genellikle aynı şey olan derleme yapılandırmasının yanı sıra yapılandırma dosyalarını da başlatır ve okur.

Yapı karmaşıklığına ve boyutuna bağlı olarak, bu, bir saniyenin bir kısmından birkaç saniyeye kadar her yere kadar sürebilir. Tek başına bu o kadar da kötü olmazdı. Ne yazık ki çoğu marka tabanlı yapı sistemi, her bir yapı için onlarca kez yüzlerce kez çağrılmaya neden oluyor. Genellikle bu, tekrar eden marka kullanımından kaynaklanır (ki bu kötüdür).

Make'ın bu kadar yavaş olmasının bir uygulama hatası olmadığı belirtilmelidir. Makefiles sözdiziminin, gerçekten hızlı bir uygulamayı imkansız kılan bazı tuhaflıkları var. Bu sorun, bir sonraki adımla birleştirildiğinde daha da belirgindir.

Bağımlılık kontrolü

Derleme aracı yapılandırmasını okuduktan sonra, hangi dosyaların değiştiğini ve hangilerinin yeniden derlenmesi gerektiğini belirlemelidir. Yapılandırma dosyaları, yapı bağımlılıklarını açıklayan yönlendirilmiş bir döngüsel grafik içerir. Bu grafik genellikle yapılandırma adımı sırasında oluşturulur. Derleme aracının başlangıç ​​zamanı ve bağımlılık tarayıcısı her derlemede çalıştırılır. Birleştirilmiş çalışma zamanı, edit-compile-debug döngüsünün alt sınırını belirler. Küçük projeler için bu süre genellikle birkaç saniyedir. Bu tolere edilebilir. Make için alternatifler var. Bunların en hızlısı Chromium için Google mühendisleri tarafından üretilen Ninja'dır. Oluşturmak için CMake veya Gyp kullanıyorsanız, Ninja arka uçlarına geçin. Yapı dosyalarındaki hiçbir şeyi değiştirmek zorunda değilsiniz, sadece hız artışının tadını çıkarın. Ninja çoğu dağıtımda paketlenmemiş,

Derleme

Bu noktada derleyiciyi çağırıyoruz. Bazı köşeleri kesmek, burada atılan yaklaşık adımlar.

  • Birleştirme şunları içerir
  • Kodu ayrıştırma
  • Kod üretimi / optimizasyonu

Popüler inanışın aksine, C ++ derlemek aslında o kadar yavaş değildir. STL yavaştır ve C ++ derlemek için kullanılan çoğu oluşturma aracı yavaştır. Bununla birlikte, dilin yavaş kısımlarını azaltmanın daha hızlı araçları ve yolları vardır.

Bunları kullanmak biraz dirsek yağı gerektirir, ancak faydaları yadsınamaz. Daha hızlı inşa süreleri daha mutlu geliştiricilere, daha fazla çevikliğe ve sonunda daha iyi kodlamaya yol açar.


9

Derlenmiş bir dilin her zaman yorumlanmış bir dilden daha büyük bir ek yük gerektirmesi gerekir. Ayrıca, belki de C ++ kodunuzu çok iyi yapılandırmadınız. Örneğin:

#include "BigClass.h"

class SmallClass
{
   BigClass m_bigClass;
}

Şundan çok daha yavaş derler:

class BigClass;

class SmallClass
{
   BigClass* m_bigClass;
}

3
Özellikle BigClass kullandığı 5 dosya daha içeriyorsa doğrudur, sonunda programınızdaki tüm kodları içerir.
Tom Leys

7
Bu belki de bir nedendir. Ancak Pascal, örneğin eşdeğer bir C ++ programının derleme süresinin onda birini alır. Bunun nedeni gcc: nin optimizasyonunun daha uzun sürmesi değil, Pascal'ın ayrıştırılmasının daha kolay olması ve bir ön işlemciyle uğraşmak zorunda olmamasıdır. Ayrıca bkz. Digital Mars D derleyicisi.
Daniel O

2
Daha kolay ayrıştırma değil, pencerelerin yeniden yorumlanmasını önleyen modülerliktir. H ve her derleme birimi için on dört diğer üstbilgi. Evet, Pascal daha kolay ayrışıyor (Delphi gibi olgun olanlar tekrar daha karmaşık olsa da), ancak büyük farkı yaratan bu değil.
Marco van de Voort

1
Burada derleme hızında bir iyileşme sağlayan tekniğe ileri bildirim denir .
DavidRR

sınıfları tek bir dosyada yazmak. dağınık kod olmaz mı?
Fennekin

7

Daha büyük C ++ projelerinde derleme süresini azaltmanın kolay bir yolu, projenizdeki tüm cpp dosyalarını içeren bir * .cpp dosyası oluşturmak ve derlemektir. Bu, başlık patlaması sorununu bir kez azaltır. Bunun avantajı, derleme hatalarının yine de doğru dosyaya başvurmasıdır.

Örneğin, a.cpp, b.cpp ve c.cpp .. dosyalarınız olduğunu varsayalım: everything.cpp:

#include "a.cpp"
#include "b.cpp"
#include "c.cpp"

O zaman projeyi sadece everything.cpp yaparak derleyin


3
Bu yönteme karşı çıkan itirazı göremiyorum. Bir komut dosyasından veya Makefile'den içerik oluşturduğunuzu varsayarsak, bu bir bakım sorunu değildir. Aslında derleme sorunlarını gizlemeden derlemeyi hızlandırır. Derleme üzerinde bellek tüketimini tartışabilirsiniz, ancak bu modern makinede nadiren görülen bir konudur. Peki bu yaklaşımın nesnesi nedir (yanlış olduğu iddiasından başka)?
rileyberton

9
@rileyberton (birisi yorumunuzu iptal ettiğinden) açıklamama izin verin: hayır derlemeyi hızlandırmıyor. Aslında, herhangi bir derleme alır emin kılan maksimum süreyi tarafından değil çeviri birimlerini izole. Bunların hakkında çok şey yani, yok değişikliğin olmasaydı tüm .cpp-s yeniden derlemek gerekiyor. (Bu stilistik argümanları göz ardı eder). Doğru bağımlılık yönetimi ve belki de önceden derlenmiş üstbilgiler çok daha iyidir.
13'te

7
Üzgünüz, ancak bu , derlemeyi hızlandırmak için çok etkili bir yöntem olabilir , çünkü (1) bağlantıyı hemen hemen ortadan kaldırırsınız ve (2) yalnızca yaygın olarak kullanılan başlıkları bir kez işlemeniz gerekir. Ayrıca, denemek için rahatsız ederseniz , pratikte çalışır . Ne yazık ki, artımlı yeniden yapılanmaları imkansız hale getiriyor, bu yüzden her yapı tamamen sıfırdan. Ama tam bu yöntemle yeniden olduğunu çok daha hızlı aksi ne alacağı daha
jalf

4
@BartekBanachewicz emin, ama söylediğiniz şey "niteleyici olmadan" derlemeyi hızlandırmıyor "idi. Söylediğiniz gibi, her derlemenin maksimum zaman almasını sağlar (kısmi yeniden oluşturma yok), ancak aynı zamanda, maksimum değeri önemli ölçüde azaltır. Ben sadece "bunu yapma" dan biraz daha nüanslı söylüyorum
jalf

2
Statik değişkenler ve fonksiyonlarla eğlenin. Büyük bir derleme birimi istiyorsam büyük bir .cpp dosyası oluşturacağım.
gnasher729

6

Bazı nedenler:

1) C ++ dilbilgisi C # veya Java'dan daha karmaşıktır ve ayrıştırılması daha fazla zaman alır.

2) (Daha önemli) C ++ derleyici makine kodu üretir ve derleme sırasında tüm optimizasyonları yapar. C # ve Java sadece yarı yolda ve JIT için bu adımları bırakın.


5

Aldığınız ticaret program biraz daha hızlı çalışır olmasıdır. Bu geliştirme sırasında sizin için soğuk bir rahatlık olabilir, ancak geliştirme tamamlandığında ve program sadece kullanıcılar tarafından çalıştırıldığında önemli olabilir.


3

Çoğu yanıt, C ++ 'da derleme zamanında yalnızca bir kez gerçekleştirilen eylemlerin maliyeti nedeniyle C #' ın her zaman daha yavaş çalışacağından bahsederken biraz belirsizdir, bu performans maliyeti de çalışma zamanı bağımlılıklarından etkilenir (yüklenebilecek daha fazla şey C # programlarının her zaman daha yüksek bellek alanına sahip olacağından bahsetmiyorum, bu da performansın mevcut donanım kapasitesiyle daha yakından ilişkili olmasıyla sonuçlandı. Aynı şey yorumlanmış veya bir VM'ye bağlı diğer diller için de geçerlidir.


3

C ++ programlarınızın derleme hızını etkileyebileceğini düşünebileceğim iki sorun var.

MUHTEMEL SORUN # 1 - BAŞLIKLARIN DÜZENLENMESİ: (Bu, başka bir yanıt veya yorum tarafından ele alınmış olabilir veya olmayabilir.) Microsoft Visual C ++ (AKA VC ++) önceden tavsiye ettiğim önceden derlenmiş başlıkları destekler. Yeni bir proje oluşturup yaptığınız program türünü seçtiğinizde, ekranınızda bir kurulum sihirbazı penceresi görünmelidir. Alt tarafındaki “İleri>” düğmesine basarsanız, pencere sizi birkaç özellik listesinin bulunduğu bir sayfaya götürür; “Önceden derlenmiş başlık” seçeneğinin yanındaki kutunun işaretli olduğundan emin olun. (NOT: Bu benim C ++ Win32 konsol uygulamaları ile benim deneyim oldu, ama bu C ++ her türlü programda böyle olmayabilir.)

MUHTEMEL SORUN # 2 - DERLENECEK YER: Bu yaz bir programlama kursu aldım ve kullandığımız laboratuvardaki bilgisayarlar gece yarısı her gece sildikçe, tüm projelerimizi 8GB flash sürücülerde depolamak zorunda kaldık, bütün işimizi silebilirdi. Taşınabilirlik / güvenlik / vb. İçin harici bir depolama cihazına derliyorsanız, çok uzun sürebilir.Özellikle de oldukça büyük bir programsa, programınızın derlenmesi için (yukarıda bahsettiğim önceden derlenmiş başlıklarla bile) zaman. Bu durumda sizin için tavsiyem, kullandığınız bilgisayarın sabit diskinde programlar oluşturmak ve derlemek ve projeniz / projeleriniz üzerinde çalışmayı durdurmak istediğinizde / ihtiyaç duyduğunuzda, harici sürücünüze aktarmak olacaktır. ve ardından bağlantısını kesmek için üzerinde beyaz bir onay işareti bulunan küçük yeşil bir dairenin arkasında küçük bir flash sürücü olarak görünmesi gereken “Donanımı Güvenle Kaldır ve Medyayı Çıkar” simgesine tıklayın.

Umarım bu sana yardımcı olur; eğer varsa bana bildirin! :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.