Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Geçmişte, #include <vector> gibi 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), derleme sürecini hızlandırmak için bir kez çevrilerek ve sonucunun yeniden kullanılmasıyla tanıtıldı. 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 kütüphaneyi adlandırılmış modüller olarak içeri aktarma desteği sundu. 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, derleyici işleme hızına ve sağlamlığına göre düzenlenmiştir; #include en yavaş ve en az sağlam, import ise en hızlı ve en sağlam olanıdır.
| Metot | Özet |
|---|---|
#include |
Dezavantajlardan biri, makroları ve iç uygulamaları kullanıma sunmalarıdır. İçsel uygulama genellikle alt çizgi ile başlayan fonksiyonlar ve türler olarak 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. Başlık dosyaları derleme sürecini yavaşlatır. Özellikle birden çok dosya aynı dosyayı içerdiğinde, çünkü o zaman üst bilgi dosyası birden çok kez yeniden işlenir. |
| Ö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ı, #include'dan daha hızlı ancak import'dan daha yavaştır. |
| Başlık 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, #include'dan daha hızlı, bakımı daha kolaydır, ayrıca önceden derlenmiş üst bilgi dosyalarından (PCH) daha hızlı, önemli ölçüde daha küçük ve bakımı daha kolaydı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. std içeri aktardığınızda, std::vector, std::cout gibi standart adları alırsınız, ancak uzantı, _Sort_unchecked gibi iç yardımcılar 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üller daha hızlıdır çünkü adlandırılmış bir modül derlenip .ifc ve .obj dosyalarına dönüştürüldüğünde, derleyici, modül içe aktarıldığında hızla yüklenebilen kaynak kodun yapılandırılmış bir temsilini oluşturur. 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üller kadar iyi azaltamaz. |
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, #include kullanın ve önceden derlenmiş üst bilgileri 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
Kılavuz: Microsoft C++ projelerinizde başlık birimleri oluşturma ve içeri aktarma