noalias
Específico de Microsoft
noalias
significa que una llamada de función no modifica el estado global visible ni hace referencia a él y solo modifica la memoria designada directamente por los parámetros de puntero (direccionamientos indirectos de primer nivel).
Si una función está anotada como noalias
, el optimizador puede suponer que, solo los parámetros en sí mismos, dentro de la función y solo los direccionamientos indirectos de primer nivel de los parámetros del puntero se modifican o se hace referencia a ellos.
La anotación noalias
solo se aplica dentro del cuerpo de la función anotada. Marcar una función como __declspec(noalias)
no afecta al alias de punteros devueltos por la función.
Para obtener otra anotación que pueda afectar al alias, consulte __declspec(restrict)
.
Ejemplo
En el ejemplo siguiente se muestra el uso de __declspec(noalias)
.
Cuando la función multiply
que accede a la memoria con está anotada como __declspec(noalias)
, se le indica al compilador que esta función no modifica el estado global excepto a través de los punteros en su lista de parámetros.
// declspec_noalias.c
#include <stdio.h>
#include <stdlib.h>
#define M 800
#define N 600
#define P 700
float * mempool, * memptr;
float * ma(int size)
{
float * retval;
retval = memptr;
memptr += size;
return retval;
}
float * init(int m, int n)
{
float * a;
int i, j;
int k=1;
a = ma(m * n);
if (!a) exit(1);
for (i=0; i<m; i++)
for (j=0; j<n; j++)
a[i*n+j] = 0.1/k++;
return a;
}
__declspec(noalias) void multiply(float * a, float * b, float * c)
{
int i, j, k;
for (j=0; j<P; j++)
for (i=0; i<M; i++)
for (k=0; k<N; k++)
c[i * P + j] =
a[i * N + k] *
b[k * P + j];
}
int main()
{
float * a, * b, * c;
mempool = (float *) malloc(sizeof(float) * (M*N + N*P + M*P));
if (!mempool)
{
puts("ERROR: Malloc returned null");
exit(1);
}
memptr = mempool;
a = init(M, N);
b = init(N, P);
c = init(M, P);
multiply(a, b, c);
}
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de