\begin{figure}[htb]
\centering
- \includegraphics[height=11cm]{img/memory_layout}
+ \includegraphics[height=12cm]{img/memory_layout}
\caption{Disposizione tipica dei segmenti di memoria di un processo.}
\label{fig:proc_mem_layout}
\end{figure}
loro prototipi sono i seguenti:
\begin{functions}
\headdecl{stdlib.h}
-\funcdecl{void *calloc(size\_t size)}
- Alloca \param{size} byte nello heap. La memoria viene inizializzata a 0.
+\funcdecl{void *calloc(size\_t nmemb, size\_t size)}
+ Alloca nello heap un'area di memoria per un vettore di \param{nmemb} membri
+ di \param{size} byte di dimensione. La memoria viene inizializzata a 0.
La funzione restituisce il puntatore alla zona di memoria allocata in caso
di successo e \val{NULL} in caso di fallimento, nel qual caso
%cerca di allocare troppa memoria non si ottiene un messaggio di errore, ma un
%segnale di \textit{segment violation} analogo a quello che si avrebbe da una
%ricorsione infinita.
+% TODO inserire più informazioni su alloca come da man page
+
Inoltre non è chiaramente possibile usare \func{alloca} per allocare memoria
che deve poi essere usata anche al di fuori della funzione in cui essa viene
cui torneremo in sez.~\ref{sec:proc_auto_var}.
-Le due funzioni seguenti vengono utilizzate soltanto quando è necessario
-effettuare direttamente la gestione della memoria associata allo spazio dati
-di un processo, ad esempio qualora si debba implementare la propria versione
-delle routine di allocazione della memoria viste in
-sez.~\ref{sec:proc_mem_malloc}. La prima funzione è \funcd{brk}, ed il suo
-prototipo è:
+Le due funzioni seguenti\footnote{le due funzioni sono state definite con BSD
+ 4.3, non fanno parte delle librerie standard del C e mentre sono state
+ esplicitamente escluse dallo standard POSIX.} vengono utilizzate soltanto
+quando è necessario effettuare direttamente la gestione della memoria
+associata allo spazio dati di un processo, ad esempio qualora si debba
+implementare la propria versione delle routine di allocazione della memoria
+viste in sez.~\ref{sec:proc_mem_malloc}. La prima funzione è \funcd{brk}, ed
+il suo prototipo è:
\begin{prototype}{unistd.h}{int brk(void *end\_data\_segment)}
Sposta la fine del segmento dei dati.
sez.~\ref{sec:sys_resource_limit}) imposto sulle dimensioni massime dello
spazio dati del processo.
-La seconda funzione per la manipolazione delle dimensioni
+Una seconda funzione per la manipolazione delle dimensioni
\index{segmento!dati} del segmento dati\footnote{in questo caso si tratta
soltanto di una funzione di libreria, e non di una system call.} è
\funcd{sbrk}, ed il suo prototipo è:
essere sicuri che esse siano state effettivamente portate in memoria, ci si
scrive sopra.
+% TODO: trattare \func{madvise}
+
+
\index{memoria~virtuale|)}
\itindend{memory~locking}