Eclipse имеет два индексатора C/С++ (быстрый и полный): какая разница?

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

Файл справки не совсем просвещает:

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

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

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

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

Ответы

Ответ 1

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

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

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

Более старые версии CDT поддерживают три различные режимы индексирования, быстрая индексация, полная индексация и отсутствие индексации. Значение по умолчанию: быстрый индекс, поскольку индексирование a большой проект может занять много времени обработать. Разница между быстрые и полные индексы - это то, что быстрый индексщик будет пропускать файлы заголовков которые уже были разобраны один раз, в то время как полный индексатор всегда будет повторно разбирайте заголовочный файл каждый раз, когда он Включено. Однако важно чтобы понять, что полный индекс, несмотря на свое название, все еще не полностью точный.

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

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

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

Ответ 2

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

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

Ответ 3

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

По моему опыту, около 32 МБ кучи.