Eclipse имеет два индексатора C / C++ (fast & full): в чем разница?

Eclipse CDT предоставляет два индексатора для кода C / C++ (предпочтения > C/C++ > индексатор). Кто-нибудь знает, в чем разница между этими двумя?

файл справки не совсем просветляет:

" CDT поддерживает вклад дополнительные индексаторы, с 2 индексаторы предоставляется CDT по умолчанию выпуск:

  • Fast C/C++ Indexer: обеспечивает самые быстрые возможности индексирования-оба заявления и перекрестная ссылка информация. Это рекомендуется индексатор.

  • полный индексатор C/C++: обеспечивает еще более точную индексацию возможности за счет производительность-как декларации, так и перекрестная справочная информация."

Что значит быть больше точный: он индексирует больше вещей,и если да, то какие?

3 ответов


вот выдержка из страницы CDT, описывающая их синтаксический анализ и индексирование (CDT / designs / обзор синтаксического анализа). Это дает довольно хорошее описание того, каковы различия и где быстрый индексатор может потерпеть неудачу:

разбор и связывание разрешение медленный процесс, это проблема поскольку пользователь ожидает редактирования кода такие функции, как content assist to be быстрый. По этой причине CDT хранит сведения о привязке на диске кэш называется "индекс" или " PDOM" (Сохраненная объектная модель документа) в чтобы иметь возможность предоставлять услуги которые быстро реагируют на запросы пользователей.

построение индекса включает в себя разбор весь код в проекте, разрешение все переплеты и записи привязки к индексу. Индекс затем постепенно обновляется каждый раз пользователь редактирует файл.

старые версии CDT поддерживают три различные режимы индексирования, быстрый индексирование, полное индексация и нет индексирование. Значение по умолчанию быстрый индексатор, потому что при индексации большой проект может занять много времени процесс. Разница между быстрые и полные индексаторы что fast indexer будет пропускать заголовочные файлы что уже разобрано , в то время как полный индексатор всегда будет повторно анализировать файл заголовка каждый раз, когда он поставляемый. Однако важно чтобы понять, что полный индексатор, несмотря на свое название, до сих пор не полностью точный.

когда файл заголовка включен в исходный файл подлежит любому макросы, которые были определены на точка. Некоторые заголовки библиотек используют макросы совместно с препроцессором условные обозначения (#ifdefs) частично включите файл заголовка. Иногда такие файл заголовка включен более чем один раз в проекте, если макросы, которые заголовок зависит от разных каждый раз, когда заголовок включен различные части заголовка могут быть включено в различное исходный файл. Ни индексатор будет точно в этот сценарий, потому что он будет только индексируйте заголовок в первый раз встречающийся.

полный индексатор будет повторно анализировать заголовки он уже сталкивался, но он не будет их переиндексировать. Следовательно исходные файлы, включающие заголовок, могут разбирайтесь точнее, но сам заголовок будет индексироваться только один момент. Полный индексатор много медленнее, чем быстрый индексатор, потому что на парсинг это делает, но это лишь ненамного точнее. Для поэтому вся индексатор не рекомендуется и был удален из текущая версия CDT.

каждый проект имеет один PDOM связанный с ней. В PDOM хранится на диске в виде плоского двоичного файла. Этот индексатор только заголовки индекс включены исходными файлами, так что если Есть.H файл в проект, который не включается ни одним .c или .cpp файл, то обычно он не получит индексированный. Однако есть предпочтение настройка индексирования всех файлов в проект.


Я считаю, что всегда reparses найденные/включаемые файлы без "кэша". Причина в том, что содержимое файлов может зависеть от определений препроцессора, поэтому оно всегда повторно обрабатывается. Быстрый парсер предполагает, что ничего не изменилось с момента первого обнаружения файла.

(но я могу ошибаться)


кто-нибудь знает, какая точная разница между этими двумя?

по моему опыту, около 32MB кучи.