Каква форма на анализ на псевдоними използва 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(restrict) и __declspec(< добавен е href="http://msdn.microsoft.com/en-us/library/k649tyc7.aspx" rel="nofollow">noalias (2003 г. или по-рано , вижте също Най-добри практики за оптимизиране)

От това Аз бих заключил, че компилаторът/оптимизаторът по подразбиране приема псевдоним съгласно правилата на C++ (приблизително указатели от един и същи тип може да сочат към една и съща памет). Това изглежда разумен ход за избягване на грешки поради глобална прекалено агресивна опция /Oa.

Освен това бих предположил, че генерирането на код по време на връзка увеличава обхвата, в който може да бъде открито неалиасинг.


Най-добрата препратка извън MSDN, която успях да намеря, е тази: Блог на екипа на VC++. Това обаче само показва, че компилаторът прекарва известно време в анализ на псевдоними. Може би Channel9 свързаният видеоклип дава известна представа.

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


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

person peterchen    schedule 23.04.2012