2009-04-18 14 views
13

Eclipse CDT, C/C++ kodu için iki dizinleyici sağlar (Tercihler> C/C++> Dizinleyici). Bu ikisi arasında tam olarak ne fark olduğunu bilen var mı? CDT 2 dizinleyicilerle varsayılan verilmesiyle bırakmaEclipse iki C/C++ dizinleyicisine (hızlı ve tam) sahiptir: fark nedir?

"CDT ek Dizinleyicilere katkısını destekler: Hızlı

  • yardım dosyası tam olarak aydınlatıcı değildir C/C++ Dizinleyici: en hızlı dizin oluşturma yetenekleri sağlar - hem bildirimleri hem de çapraz başvuru bilgi Bu önerilen dizin.

  • Tam C/C++ Indexer: Hatta daha doğru indeksleme performans maliyetiyle yetenekleri sağlar - bildirimleri hem de çapraz başvuru bilgileri "

daha fazla olması için ne anlama geliyor. doğru:?. endeksin daha fazla şeyler yapar ve eğer öyleyse ben her zaman herhangi bir "önbelleğe alma" olmadan dosyaları dahil/bulunan reparses inanıyoruz hangilerinin

+1

Hala Eclipse Kepler'de iki indeksleyici var mı? İkiyi görmüyorum ... belki de bir tanesi kaldırıldı mı? – einpoklum

cevap

13

CDT sayfasından ayrıştırma ve indeksleme özelliklerini açıklayan bir alıntı (CDT/designs/Overview of Parsing). Bu farklar ve hızlı dizin başarısız nerede ne çok iyi bir açıklamasını verir:

Ayrıştırma ve bağlayıcı çözünürlük kullanıcı gibi kod düzenleme özellikleri bekler çünkü yavaş bir süreç, bu bir sorun olduğunu içerik, 'un hızlı olmasına yardımcı olur. için “endeks” veya “PDOM” (Devam eden Document Object Model) adı verilen bir disk üzerindeki önbelleğinde bilgi bağlayıcı Bu nedenle CDT saklar için kullanıcı isteklerine hızlı cevap özellikleri sağlamak mümkün.

endeksi Bina tüm bağlamalar çözülmesi ve endeks için bu bağlamaları yazma, bir projede tüm kodu ayrıştırma gerektirir. Endeks, şeklindedir, daha sonra her zaman kullanıcı tarafından bir dosyada düzenlenir.CDT destek

Eski sürümleri üç farklı indeksleme modları, hızlı indeksleme, tam indeksleme ve hiçbir indeksleme. Varsayılan ayar, büyük projesinin indekslenmesi hızlı indeksleyici olduğundan, işleminin zaman alıcı olabilmesidir. hızlı ve tam Dizinleyicilere arasındaki fark tam dizin daima bir başlık dosyasını o dahil her zaman yeniden ayrıştırma olurken hızlı dizin başlık dosyaları zaten bir kez çözümlenen edilmiş , atlamak olacaktır. Ancak, , tam dizinleyicinin, ismine rağmen, tam olarak tam olarak doğru olmadığını anlamak önemlidir. Bir başlık dosyası kaynak dosyasına dahil edildiğinde

o noktada tanımlanmış herhangi makrolar tabidir. Bazı kitaplık üstbilgileri, önişlemcisiyle (#ifdefs) birlikte makrolarını kısmen için bir üstbilgi dosyası içerir. başlık bağlıdır makro başlık başlığının ardından farklı parçalar farklı kaynak dosyaları dahil edilebilir dahildir her seferinde farklı iseniz Bazen böyle bir başlık dosyası, bir projede bir kez daha çok dahildir. Bu dizin numaralı dizgede doğru olacaktır, çünkü yalnızca numaralı dizgenin başlığını, ilk kez karşılaştığı zaman dizinleyecektir.

Tam dizinleyici, zaten karşılaştığı üstbilgileri yeniden ayrıştırır, ancak bunları yeniden indekslemez. Bu nedenle, bir üstbilgiyi içeren kaynak dosyaları daha doğru ayrıştırılabilir, ancak başlığının kendisi yalnızca bir kez dizinlenir. Tam dizinleyici, fazladan ayrıştırmanın olması nedeniyle hızlı indeksleyiciden daha yavaştır, ancak sadece çok daha doğrudur. için Tam dizinleyici bu nedenle önerilir ve CDT'nin geçerli sürümünden kaldırılmıştır.

Her projede, onunla ilişkili tek bir PDOM vardır. PDOM, diskte depoda düz bir ikili dosya olarak saklanır. dizinleyici, yalnızca kaynak dosyalarının içerdiği başlıkları dizine ekler, böylece , öğesinin herhangi bir .c veya .cpp dosyasına eklenmemesi durumunda, normalde almaz dizinlendi. Ancak, projesindeki tüm dosyaları dizine eklemek için tercihiniz vardır.

+6

Bu Wiki sayfa girişini yazdım ve burada yeniden okudum yanlış olduğunu anladım. Tam dizinleyici aslında tam olarak doğru değildir ve mevcut CDT sürümünden kaldırılmıştır. Ben wiki ve bu cevabı doğru olarak güncelledim (ve doğru emin olmak için diğer CDT geliştiricileri ile kontrol ettim). –

+1

@MikeKucera eclipse'i kullanan herkesin eski bir sürümünü kullandığını, böylece tam dizinleyiciyi alabilmelerini, güncel sürümlere dönüp dönmeyeceğini biliyor musunuz? –

+0

Kalan dizinleyiciyi artık 'fast' endeksleyiciyi bile aramıyoruz, çünkü yıllardır sadece bir indeksleyici var şimdi sadece 'indexer' olarak adlandırmaya başladık. Son zamanlarda pek çok doğruluk ve hız artışı elde etti. Örneğin, dizinleyici artık farklı bağlamlarda (yani önemli makroların farklı setleri) birden fazla içeriyorsa, bir başlık dosyasını çok kez indeksleyecektir. Bu, eski tam dizinleyicinin büyük bir performans cezası olmadan sahip olduğu çok fazla doğruluğa geri dönmenizi sağlar. Siz ve arkadaşlarınızın CDT'nin en son sürümüne geçmesini tavsiye ederim. –

1

Bunun nedeni, dosyaların içeriğinin önişlemci tanımlarına bağlı olup, bu nedenle her zaman yeniden yüklenir. Hızlı ayrıştırıcı, dosya ilk karşılaşıldığından beri hiçbir şeyin değişmediğini varsayar.

(ama yanlış olabilir)

1

herkes kesin fark, bu ikisi arasında ne olduğunu biliyor mu?

Deneyimlerime göre, yaklaşık 32MB yığın.

İlgili konular