La norme du langage C fournit une interface standardisée
pour la gestion de la mémoire, dans la libc
,
principalement le duo malloc/free
.
C'est le compilateur C qui doit transformer cette interface en une série d'appels système, dépendant de l'OS. On regarde par exemple comment c'est fait sous Unix.
strace
(et sa variante truss
sous Solaris) sert à savoir quels sont les appels système utilisés
pendant l'exécution d'un programme. Il s'agit donc de regarder les
intercations du programme avec le noyau (NB: ce n'est pas le même genre
de diagnostic que fournit un débugguer comme gdb
qui
se place au niveau du langage C, ou bien adb
qui est au
niveau assembleur.)
brk
qui fixe la taille du segment de données,
et mmap
qui fait se correspondre un fichier et
la mémoire.
mmap
pour faire de la copie de fichiers.
Comparer la vitesse d'exécution par rapport à une boucle
read/write
.
malloc
en n'utilisant
que l'appel système brk
. On programmera juste les fonctions
Malloc
et Free
.
mmap
avec l'option MAP_SHARED
et comparer
les deux approches.
/tmp
et le swap sont sur une même
partition, plus rapide d'accès que les partitions habituelles.
Est-ce perceptible avec votre programme ?