Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Khusus Microsoft
Saat diterapkan ke deklarasi fungsi atau definisi yang mengembalikan jenis penunjuk, restrict
memberi tahu pengkompilasi bahwa fungsi mengembalikan objek yang tidak diberi alias, yaitu, direferensikan oleh pointer lain. Ini memungkinkan pengkompilasi untuk melakukan pengoptimalan tambahan.
Sintaks
__declspec(restrict)
pointer_return_typefunction();
Keterangan
Pengkompilasi __declspec(restrict)
menyebar . Misalnya, fungsi CRT malloc
memiliki __declspec(restrict)
dekorasi, dan oleh karena itu, pengkompilasi mengasumsikan bahwa pointer yang diinisialisasi ke lokasi malloc
memori juga tidak dinamai oleh pointer yang ada sebelumnya.
Pengkompilasi tidak memeriksa bahwa pointer yang dikembalikan tidak benar-benar alias. Adalah tanggung jawab pengembang untuk memastikan program tidak alias penunjuk yang ditandai dengan pengubah batas __declspec .
Untuk semantik serupa pada variabel, lihat __restrict.
Untuk anotasi lain yang berlaku untuk alias dalam fungsi, lihat __declspec(noalias).
Untuk informasi tentang restrict
kata kunci yang merupakan bagian dari C++ AMP, lihat membatasi (C++ AMP).
Contoh
Sampel berikut menunjukkan penggunaan __declspec(restrict)
.
Ketika __declspec(restrict)
diterapkan ke fungsi yang mengembalikan penunjuk, ini memberi tahu pengkompilasi bahwa memori yang ditunjukkan oleh nilai yang dikembalikan tidak alias. Dalam contoh ini, pointer mempool
dan memptr
bersifat global, sehingga pengkompilasi tidak dapat yakin bahwa memori yang mereka rujuk tidak alias. Namun, mereka digunakan di dalam ma
dan pemanggilnya init
dengan cara yang mengembalikan memori yang tidak dirujuk oleh program, sehingga __decslpec(batas) digunakan untuk membantu pengoptimal. Ini mirip dengan bagaimana header CRT menghias fungsi alokasi seperti malloc
dengan menggunakan __declspec(restrict)
untuk menunjukkan bahwa mereka selalu mengembalikan memori yang tidak dapat dinamai oleh pointer yang ada.
// declspec_restrict.c
// Compile with: cl /W4 declspec_restrict.c
#include <stdio.h>
#include <stdlib.h>
#define M 800
#define N 600
#define P 700
float * mempool, * memptr;
__declspec(restrict) float * ma(int size)
{
float * retval;
retval = memptr;
memptr += size;
return retval;
}
__declspec(restrict) 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.1f/k++;
return a;
}
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);
}
END Khusus Microsoft