Restrict: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ottimizzazione: più chiaro
Atarubot (discussione | contributi)
template cita "xxxx"; rinomina/fix nomi parametri; converto template cite xxx -> cita xxx; fix formato data
Riga 2:
La [[parola chiave (informatica)|parola chiave]] <code>restrict</code> è usata nel linguaggio [[C (linguaggio)|C]] (a partire dallo standard C99) per qualificare un [[puntatore (programmazione)|puntatore]] come non soggetto ad [[pointer aliasing|aliasing]] da parte di altri puntatori non dichiarati a partire da esso. Nel dichiarare un puntatore <code>restrict</code>, il programmatore esegue una dichiarazione di intento, informando il [[compilatore]] che, nel suo intero ciclo di vita, solo quel puntatore ed eventualmente altri puntatori derivati a partire da esso saranno usati per accedere all'oggetto puntato. Se la dichiarazione di intento è violata dal programmatore e un altro puntatore è usato per accedere all'oggetto, il comportamento del programma è [[comportamento indefinito|indefinito]].
 
Tale informazione consente al compilatore di generare codice meglio ottimizzato: in principio, l'aggiunta di <code>restrict</code> allo standard C consente di colmare il divario rispetto a [[Fortran]] in applicazioni di [[calcolo numerico]].<ref name=drepper>{{citeCita web|url=https://lwn.net/Articles/255364/|titletitolo=Memory part 5: What programmers can do|workopera=What every programmer should know about memory|authorautore=[[Ulrich Drepper]]|datedata=October 23, ottobre 2007|publishereditore=[[lwn.net]]|quotecitazione="...The default aliasing rules of the C and C++ languages do not help the compiler making these decisions (unless restrict is used, all pointer accesses are potential sources of aliasing). This is why Fortran is still a preferred language for numeric programming: it makes writing fast code easier. (In theory the restrict keyword introduced into the C language in the 1999 revision should solve the problem. Compilers have not caught up yet, though. The reason is mainly that too much incorrect code exists which would mislead the compiler and cause it to generate incorrect object code.)"}}</ref>
 
Lo standard del linguaggio [[C++]] non prevede la parola chiave <code>restrict</code>, ma molti compilatori implementano una parola chiave non-standard che fornisce un effetto analogo alla controparte in C, ad esempio <code>__restrict__</code> in [[GNU Compiler Collection|GCC]]<ref>{{cita web|url=https://gcc.gnu.org/onlinedocs/gcc/Restricted-Pointers.html|titolo=Using the GNU Compiler Collection: Restricted Pointers}}</ref> o <code>__restrict</code> e <code>__declspec(restrict)</code> in [[Visual C++]].<ref>{{cita web|url=https://msdn.microsoft.com/it-it/library/5ft82fed.aspx|titolo=__restrict}}</ref>
Riga 45:
 
== Bibliografia ==
*{{Cita pubblicazione|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
*{{cite paper
|titletitolo=ISO/IEC 9899:TC2 Committee Draft
|url=http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
|publishereditore=[[International Organization for Standardization|ISO]]
|title=ISO/IEC 9899:TC2 Committee Draft
|data=6 maggio 2005
|publisher=[[International Organization for Standardization|ISO]]
|accesso=22 dicembre 2008
|date=May 6, 2005
|pagespp=108–112
|accessdate=2008-12-22
|pages=108–112
}}
 
Riga 57 ⟶ 56:
 
* [http://www.cellperformance.com/mike_acton/2006/05/demystifying_the_restrict_keyw.html Demystifying The Restrict Keyword]: explanation and examples of use
* {{citeCita web|url=http://www.oracle.com/technetwork/server-storage/solaris10/cc-restrict-139391.html|titletitolo=How to Use the restrict Qualifier in C|lastcognome=Walls|firstnome=Douglas |publishereditore=Oracle™|accessdateaccesso=2012-11-21 novembre 2012}}
* [http://www.lysator.liu.se/c/restrict.html Restricted Pointers in C]: the original rationale behind the definition
{{portale|informatica}}