8

Estoy tratando de averiguar qué forma de se usa el análisis de alias en Visual C++. También se lo conoce como análisis de punteros, análisis de mod-ref, análisis de puntos o análisis de efectos secundarios, y está muy cerca del análisis de escape o el análisis de formas (en caso de que haya visto esos términos).¿Qué forma de análisis de alias usa Visual C++?

Si alguien sabe dónde MSDN discute este tipo de cosas, probablemente pueda encontrar el camino a partir de ahí. (He intentado buscar, pero MSDN parece ser impenetrable si no se pasa mucho tiempo allí.)

+3

MSDN es difícil. Es mejor usar Google con el sitio: msdn.com que utilizar la búsqueda de MSDN. –

+0

Supongo que aportarán la mayor cantidad de armamento posible, ya que los resultados con alias deshabilitan muchas optimizaciones. Entonces no esperaría que la respuesta sea simple. Incluso si utilizaron un análisis de "puntos a", hay muchas variaciones: sensible al flujo/insensible, sensible al contexto o no, sensible al entorno o no, intraprocedimiento, interprocedimiento, unidades de compilación cruzada, ... Lo que hay detrás ¿la pregunta? –

+1

@Ira Baxter: Eso es exactamente lo que intento descubrir. ¿Es sensible al flujo, contexto, campo, objeto, etc.? Qué hay detrás: estoy haciendo mi revisión bibliográfica para mi tesis doctoral, y me di cuenta de que sé la respuesta (o cómo encontrar la respuesta) para gcc, LLVM y algunos otros compiladores, pero no pude encontrarla para Visual C++ . –

Respuesta

2

ir por pura documentación de MSDN:

"no asumen ninguna aliasing" (/Oa) y las opciones relacionadas han eliminado en Visual Studio 2008.

__declspec (restrict) y se han añadido __declspec (noalias) (2003 o anterior, consulta Optimization best practices)

A partir de ese I llegaría a la conclusión de que el compilador/optimizador por defecto asume aliasing bajo las reglas de C++ (aproximadamente, los apuntadores del mismo tipo pueden apuntar a la misma memoria). Esto parece un movimiento sensato para evitar errores debido a una opción global demasiado agresiva/Oa.

Supongo además que la generación de código de tiempo de enlace aumenta el alcance en el que se puede detectar el no aliasing.


La mejor referencia de MSDN no he podido encontrar es la siguiente: VC++ team blog. Sin embargo, esto solo indica que el compilador pasa algo de tiempo en el análisis de alias. Tal vez el video vinculado a Channel9 da alguna idea.

(Algunas personas tuvieron suerte con pedir más información en los comentarios de la VC++. Pista pista ...)


[editar ] No sé si Phoenix terminó en VS2010, la video habla sobre aliasing 6:00, pero nada espectacular.

Cuestiones relacionadas