Какую форму анализа псевдонимов использует Visual C++?

Я пытаюсь выяснить, какая форма анализа псевдонимов используется в Visual C++. Он также известен как анализ указателей, анализ модификаций, анализ точек к анализу или анализ побочных эффектов и довольно близок к анализу уклонения или анализу формы (если вы видели, как эти термины упоминаются).

Если кто-нибудь знает, где MSDN обсуждает подобные вещи, я, вероятно, смогу найти путь оттуда. (Я пробовал искать, но MSDN кажется недоступным, если вы не проводите там много времени.)


person Paul Biggar    schedule 31.08.2009    source источник
comment
MSDN — это сложно. Лучше использовать Google с site:msdn.com, чем использовать сам поиск MSDN.   -  person i_am_jorf    schedule 31.08.2009
comment
Я бы предположил, что они будут использовать как можно больше оружия, поскольку результаты с псевдонимами отключают множество оптимизаций. Поэтому я не ожидал, что ответ будет простым. Даже если они использовали точечный анализ, существует множество вариаций: чувствительный/нечувствительный к потоку, чувствительный к контексту или нет, чувствительный к полю или нет, внутрипроцедурный, межпроцедурный, единицы кросс-компиляции, ... Что стоит за вопросом?   -  person Ira Baxter    schedule 01.09.2009
comment
@Ira Baxter: Это именно то, что я пытаюсь понять. Является ли он чувствительным к потоку, контексту, полю, объекту и т. д.? Что за этим стоит: я делаю обзор литературы для своей докторской диссертации и понял, что знаю ответ (или как найти ответ) для gcc, LLVM и некоторых других компиляторов, но я не смог найти его для Visual C++. .   -  person Paul Biggar    schedule 01.09.2009
comment
TBH, вы, вероятно, получите лучшие результаты из блогов разработчиков MSDN VC++, чем сама MSDN для такого рода вещей.   -  person Necrolis    schedule 17.04.2012


Ответы (1)


Исходя исключительно из документации MSDN:

«Предположим, что псевдонимы отсутствуют» (/Oa) и связанные параметры были удалены в Visual Studio 2008.

__declspec(ограничение) и __declspec(< добавлен href="http://msdn.microsoft.com/en-us/library/k649tyc7.aspx" rel="nofollow">noalias) (2003 г. или ранее , см. также рекомендации по оптимизации)

Из этого я сделал бы вывод, что компилятор/оптимизатор по умолчанию предполагает использование псевдонимов в соответствии с правилами C++ (грубо говоря, указатели одного типа могут указывать на одну и ту же память). Это кажется разумным шагом во избежание ошибок из-за чрезмерно агрессивной глобальной опции /Oa.

Я бы также предположил, что генерация кода во время компоновки увеличивает область, в которой может быть обнаружено отсутствие псевдонимов.


Лучший справочник, не связанный с MSDN, который я смог найти, это: блог команды VC++. Однако это просто указывает на то, что компилятор тратит некоторое время на анализ псевдонимов. Возможно, Channel9 ссылка на видео дает некоторое представление.

(Некоторым людям посчастливилось запросить дополнительную информацию в комментариях к VC++. Подсказка...)


[edit] Я не знаю, оказался ли Phoenix в VS2010, в видео говорится о алиасинге 6:00, но ничего впечатляющего.

person peterchen    schedule 23.04.2012