Eclipse имеет два индексатора C / C ++ (быстрый и полный): в чем разница? - PullRequest
13 голосов
/ 18 апреля 2009

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

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

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

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

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

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

Ответы [ 3 ]

14 голосов
/ 22 апреля 2009

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

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

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

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

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

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

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

1 голос
/ 20 апреля 2009

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

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

1 голос
/ 18 апреля 2009

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

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

...