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.
MSDN è difficile. È meglio utilizzare Google con il sito: msdn.com piuttosto che utilizzare la ricerca MSDN stessa. –
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? –
@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++ . –