Aracılığıyla paylaş


Üst bilgi birimlerini, modülleri ve önceden derlenmiş üst bilgileri karşılaştırma

Geçmişte, gibi #include <vector>bir yönerge ile standart kitaplığı dahil ederdiniz. Bununla birlikte, üst bilgi dosyalarını içeren her kaynak dosya tarafından yeniden işlenmeleri nedeniyle bunları eklemek pahalıdır.

Önceden derlenmiş üst bilgiler (PCH), derlemeyi bir kez çevirip sonucu yeniden kullanarak derlemeyi hızlandırdı. Ancak önceden derlenmiş üst bilgilerin bakımını yapmak zor olabilir.

C++20'de modüller, üst bilgi dosyalarında ve önceden derlenmiş üst bilgilerde önemli bir geliştirme olarak sunulmuştur.

Üst bilgi birimleri C++20'de, üst bilgi dosyaları ve modüller arasındaki boşluğu geçici olarak kapatmanın bir yolu olarak sunulmuştur. Siz kodunuzu modülleri kullanacak şekilde geçirirken bu modüller modüllerin hız ve sağlamlık avantajlarından bazılarını sağlar.

Ardından, C++23 standart kitaplığı standart kitaplığı adlandırılmış modüller olarak içeri aktarma desteği sunar. Bu, standart kitaplığı kullanmanın en hızlı ve en sağlam yoludur.

Farklı seçenekleri sıralamanıza yardımcı olmak için bu makalede geleneksel #include yöntem önceden derlenmiş üst bilgiler, üst bilgi birimleri ve adlandırılmış modülleri içeri aktarma ile karşılaştırılır.

Aşağıdaki tablo, #include derleyici işleme hızına ve sağlamlığına göre, en yavaş ve en az sağlam import ve en hızlı ve en sağlam olacak şekilde düzenlenmiştir.

Yöntem Özet
#include Dezavantajlardan biri, makroları ve iç uygulamaları kullanıma sunmalarıdır. İç uygulama genellikle alt çizgiyle başlayan işlevler ve türler olarak kullanıma sunulur. Bu, bir şeyin iç uygulamanın bir parçası olduğunu ve kullanılmaması gerektiğini belirten bir kuraldır.

#includes sırası davranışı değiştirebildiğinden veya kodu kırabileceğinden ve makro tanımlarından etkilendiği için üst bilgi dosyaları kırılgandır.

Üst bilgi dosyaları yavaş derleme. Üst bilgi dosyası birden çok kez yeniden işlendiğinden, özellikle birden çok dosya aynı dosyayı içerdiğinde.
Önceden derlenmiş üst bilgi Önceden derlenmiş üst bilgi (PCH), bir dizi üst bilgi dosyasının derleyici bellek anlık görüntüsünü oluşturarak derleme süresini geliştirir. Bu, üst bilgi dosyalarının tekrar tekrar yeniden oluşturulmasına yönelik bir geliştirmedir.

PCH dosyalarının bakımını zorlaştıran kısıtlamaları vardır.

PCH dosyaları değerinden #include daha hızlıdır ancak daha importyavaştır.
Üst bilgi birimleri Bu, C++20'de 'iyi davranan' üst bilgi dosyalarını modül olarak içeri aktarmanızı sağlayan yeni bir özelliktir.

Üst bilgi birimleri değerinden #includedaha hızlıdır ve önceden derlenmiş üst bilgi dosyalarından (PCH) daha hızlıdır ve bakımı daha kolaydır, önemli ölçüde daha küçüktür ve daha hızlıdır.

Üst bilgi birimleri, üst bilgi dosyalarında tanımlanan makroları kullandığınız durumlarda adlandırılmış modüllere geçişe yardımcı olan bir 'arada' adımdır, çünkü adlandırılmış modüller makroları kullanıma sunmaz.

Üst bilgi birimleri adlandırılmış bir modülü içeri aktarmaktan daha yavaştır.

Üst bilgi birimi oluşturulduğunda komut satırında belirtilmedikçe üst bilgi birimleri makro tanımlarından etkilenmez ve üst bilgi dosyalarından daha sağlam hale gelir.

Üst bilgi birimleri, içinde tanımlanan makroları ve iç uygulamaları tıpkı başlık dosyasında olduğu gibi kullanıma sunar ve adlandırılmış modüller bunu yapmaz.

Dosya boyutunun kabaca bir tahmini olarak, 250 megabaytlık PCH dosyası 80 megabaytlık üst bilgi birimi dosyasıyla temsil edilebilir.
Modüller bu, işlevselliği içeri aktarmanın en hızlı ve en sağlam yoludur.

C++20'de modülleri içeri aktarma desteği sunulmuştur. C++23 standart kitaplığı, bu konuda açıklanan iki adlandırılmış modülü tanıtır.

İçeri aktardığınızdastd, , std::coutgibi std::vectorstandart adları alırsınız, ancak uzantı olmaz, gibi _Sort_uncheckediç yardımcılar olmaz ve makro olmaz.

makro veya başka yan etkileri olmadığından içeri aktarmaların sırası önemli değildir.

Dosya boyutunun kabaca bir tahmini olarak, 250 megabaytlık BIR PCH dosyası, 25 megabaytlık bir modülle temsil edilebilen 80 megabaytlık üst bilgi birim dosyasıyla temsil edilebilir.

Adlandırılmış modül bir dosyada ve .obj dosyada .ifc derlendiğinde derleyici, modül içeri aktarıldığında hızla yüklenebilen kaynak kodun yapılandırılmış bir gösterimini yaydığı için adlandırılmış modüller daha hızlıdır. Derleyici, adlandırılmış modüllerin .ifc sıraylan bağımsız ve makrodan bağımsız olması nedeniyle dosyayı yaymadan önce bazı çalışmalar (ad çözümlemesi gibi) gerçekleştirebilir; bu nedenle modül içeri aktarıldığında bu işin yapılması gerekmez. Buna karşılık, bir üst bilgi dosyası ile #includebirlikte kullanıldığında, içeriğinin her çeviri ünitesinde tekrar tekrar önceden işlenip derlenmiş olması gerekir.

Derleyici bellek anlık görüntüleri olan önceden derlenmiş üst bilgiler, bu maliyetleri azaltabilir, ancak adlandırılmış modüllerin yanı sıra azaltamazsınız.

Uygulamanızda C++20 özelliklerini ve C++23 standart kitaplığını kullanabiliyorsanız adlandırılmış modülleri kullanın.

C++20 özelliklerini kullanabiliyorsanız ancak zaman içinde modüllere geçiş yapmak istiyorsanız, aradaki üst bilgi birimlerini kullanın.

C++20 özelliklerini kullanamıyorsanız önceden derlenmiş üst bilgileri kullanın #include ve göz önünde bulundurun.

Ayrıca bkz.

Önceden derlenmiş üst bilgi dosyaları
C++ içindeki modüllere genel bakış
Öğretici: Modülleri kullanarak C++ standart kitaplığını içeri aktarma
İzlenecek yol: STL kitaplıklarını üst bilgi birimi olarak içeri aktarma
İzlenecek yol: Visual C++ projelerinizde üst bilgi birimleri oluşturma ve içeri aktarma