8

Sto cercando di capire quale forma di analisi alias viene utilizzata in Visual C++.. È anche noto come analisi puntatore, analisi mod-ref, analisi puntiformi o analisi degli effetti collaterali ed è molto simile all'analisi di escape o all'analisi della forma (se dovessi vedere quei termini messi insieme).Quale forma di analisi alias utilizza Visual C++?

Se qualcuno sa dove MSDN discute questo tipo di cose, posso probabilmente trovare la mia strada da lì. (Ho provato a cercare, ma MSDN sembra essere impenetrabile se non si trascorre molto tempo lì.)

+3

MSDN è difficile. È meglio utilizzare Google con il sito: msdn.com piuttosto che utilizzare la ricerca MSDN stessa. –

+0

Suppongo che porterebbero più armi possibili per quanto possibile, poiché i risultati alias disabilitano molte ottimizzazioni. Quindi non aspetterei che la risposta fosse semplice. Anche se hanno usato un'analisi "punti a", ci sono molte varianti: sensibile al flusso/insensibile, sensibile al contesto o no, sensibile alla febbre o meno, intra-procedurale, interprocedura, unità di compilazione incrociate, ... Cosa c'è dietro la domanda? –

+1

@Ira Baxter: Questo è esattamente quello che sto cercando di capire. È sensibile al flusso, al contesto, al campo, all'oggetto, ecc.? Cosa c'è dietro: sto facendo la mia recensione di letteratura per la mia tesi di dottorato, e mi sono reso conto di conoscere la risposta (o come trovare la risposta) per gcc, LLVM e alcuni altri compilatori, ma non riuscivo a trovarla per Visual C++ . –

risposta

2

Andando puro MSDN documentazione:

"assume alcuna aliasing" (/Oa) e le opzioni correlate sono stato rimosso in Visual Studio 2008.

__declspec (restrict) e __declspec (noalias) sono stati aggiunti (2003 o versioni precedenti, puoi anche Optimization best practices)

Da quel ho trarrebbe la conclusione che il compilatore/ottimizzatore di default assume aliasing ai sensi delle norme C++ (grosso modo, i puntatori dello stesso tipo potrebbero puntare alla stessa memoria). Questa sembra una mossa ragionevole per evitare errori dovuti a un'opzione Oa eccessivamente aggressiva/globale.

Suppongo inoltre che la generazione del codice di collegamento aumenta l'ambito in cui è possibile rilevare il non-aliasing.


Il miglior riferimento non MSDN ho trovato è questo: VC++ team blog. Tuttavia, ciò indica solo che il compilatore dedica un po 'di tempo all'analisi alias. Forse il video collegato a Channel9 offre alcune informazioni.

(Alcune persone hanno avuto fortuna con chiedendo più informazioni nei commenti del VC++. Hint suggerimento ...)


[modifica] Non so se Phoenix è finito in VS2010, il il video parla di aliasing alle 6:00, ma niente di spettacolare.