una teorema sismica señal nyquist muestreo geofisica frecuencia efecto antialias c performance

teorema - Beneficios de rendimiento de aliasing estricto



muestreo de una señal (1)

En C, ¿cuáles son exactamente los beneficios de rendimiento que conlleva la observación de un alias estricto?


Hay una página que describe el aliasing a fondo here .

También hay algunos temas de SO here y here .

Para resumir, el compilador no puede asumir el valor de los datos cuando dos punteros de diferentes tipos acceden a la misma ubicación (es decir, debe leer el valor cada vez y, por lo tanto, no puede realizar optimizaciones).

Esto solo ocurre cuando no se está aplicando un alias estricto. Opciones de alias estrictas:

  • gcc: -fstrict-aliasing [predeterminado] y -fno-strict-aliasing
  • msvc: el aliasing estricto está desactivado de forma predeterminada. (Si alguien sabe cómo encenderlo, por favor dígalo).

Ejemplo

Copie y pegue este código en main.c:

void f(unsigned u) { unsigned short* const bad = (unsigned short*)&u; } int main(void) { f(5); return 0; }

Luego compila el código con estas opciones:

gcc main.c -Wall -O2

Y obtendrás:

main.c: 3: advertencia: la desreferenciación del puntero con tipo de letra infringirá las reglas de alias estricto

Deshabilitar el alias con:

gcc main.c -fno-strict-aliasing -Wall -O2

Y la advertencia se va. (O simplemente saque -Wall pero ... no compile sin él)

Por más que intente, no pude hacer que MSVC me avise.