Anche se la risposta di Jeff è giusto, vale a dire, si può sempre fare un puntatore alla matrice assegnato, il fatto è che il compilatore sa a tempo di compilazione che tmpvalues non saranno alias perché la variabile è dichiarata come un matrice reale, non un puntatore. Le uniche possibilità di alias di un array è dichiarare un puntatore ad esso, quindi se non lo fai, non è necessario dichiararlo come restrict
. Questo è più evidente se tmpvalues
è l'unica variabile che avrai all'interno della funzione.
Il problema può sorgere se si passa il puntatore a un'altra funzione, quindi è necessario indicare se il puntatore ricevuto è limitato o meno.
La documentazione che ho incontrato relativa a questo argomento vengono presentate le C99:
Sia D una dichiarazione di un identificatore normale che fornisce un mezzo di designare un oggetto P come puntatore limitare qualificato per tipo T
Si noti che si applica solo ai puntatori.
This other document di TI fornisce alcuni suggerimenti di ottimizzazione delle prestazioni utilizzando la parola chiave restrict
. Oltre a tutti i suggerimenti, la sezione 3.3 fornisce esempi quando è possibile applicare questo qualificatore di tipo e quando no. Cerca la dichiarazione dell'array x
a metà di pagina 16, afferma che non dichiara un puntatore e quindi non può essere restrict
-qualificato.
Che tipo di avvertimento lancia? – dhein
"invalid use of restrict" - dovrebbe essere usato con puntatori, non array (per quanto ho capito). Potrei fare float * limitare tmpvalues = malloc (sizeof (float) * 1000) ma poi non sto allocando sullo stack che potrebbe influenzare anche le prestazioni. Oltre a dire a un compilatore che l'accesso agli indici di array è sicuro (quindi non sono necessarie letture difensive) sembra un'estensione molto naturale dell'uso limitato con i puntatori in modo così intuitivo che ci deve essere un modo per farlo. –
Ho fatto: float * limita tmpvalues = alloca (sizeof (float) * 1000); memset (tmpvalues, 0, sizeof (float) * 1000); ed è un miglioramento misurabile, ma preferirei farlo in standard (come nel caso di denuncia C99) –