X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=3069d292982dddf97840eb29484c09a5d403ca41;hp=61cca0f1535d1b2ea04866424e9c1d54c1020495;hb=0345bbfd866e46d3c76d0df7f37a83f9a3924926;hpb=e2a1ad24365266ea8846b688addd4e7694428969 diff --git a/process.tex b/process.tex index 61cca0f..3069d29 100644 --- a/process.tex +++ b/process.tex @@ -1344,7 +1344,7 @@ stati scritti. Per fare questo in \file{stdarg.h} sono definite delle apposite macro; la procedura da seguire è la seguente: \begin{enumerate*} \item Inizializzare un puntatore alla lista degli argomenti di tipo - \type{va\_list} attraverso la macro \macro{va\_start}. + \macro{va\_list} attraverso la macro \macro{va\_start}. \item Accedere ai vari argomenti opzionali con chiamate successive alla macro \macro{va\_arg}, la prima chiamata restituirà il primo argomento, la seconda il secondo e così via. @@ -1569,8 +1569,16 @@ Uno dei punti critici dei salti non-locali variabili, ed in particolare quello delle variabili automatiche della funzione a cui si ritorna. In generale le variabili globali e statiche mantengono i valori che avevano al momento della chiamata di \func{longjmp}, ma quelli -delle variabili automatiche (o di quelle dichiarate \code{register}) sono in -genere indeterminati. +delle variabili automatiche (o di quelle dichiarate +\direct{register}\footnote{la direttiva \direct{register} del compilatore + chiede che la variabile dichiarata tale sia mantenuta, nei limiti del + possibile, all'interno di un registro del processore. Questa direttiva + origina dai primi compilatori, quando stava al programmatore scrivere codice + ottimizzato, riservando esplicitamente alle variabili più usate l'uso dei + registri del processore. Oggi questa direttiva oggi è in disuso dato che + tutti i compilatori sono normalmente in grado di valutare con maggior + efficacia degli stessi programmatori quando sia il caso di eseguire questa + ottimizzazione.}) sono in genere indeterminati. Quello che succede infatti è che i valori delle variabili che sono tenute in memoria manterranno il valore avuto al momento della chiamata di @@ -1579,7 +1587,13 @@ chiamata ad un'altra funzioni vengono salvati nel contesto nello stack) torneranno al valore avuto al momento della chiamata di \func{setjmp}; per questo quando si vuole avere un comportamento coerente si può bloccare l'ottimizzazione che porta le variabili nei registri dichiarandole tutte come -\code{volatile}. +\direct{volatile}\footnote{la direttiva \ctyp{volatile} informa il compilatore + che la variabile che è dichiarata può essere modificata, durante + l'esecuzione del nostro, da altri programmi. Per questo motivo occorre dire + al compilatore che non deve essere mai utilizzata l'ottimizzazione per cui + quanto opportuno essa viene mantenuta in un registro, poiché in questo modo + si perderebbero le eventuali modifiche fatte dagli altri programmi (che + avvengono solo in una copia posta in memoria).}.