Professional Documents
Culture Documents
Filière
Master 1 : Systèmes Electroniques
2018/2019
Réalisé par :
LAARBI LAALILICH
HANSAL HAMZA
BADRI GHANEM
1|Page
Tables des matières
2|Page
Introduction
Le langage de programmation C est à la base des systèmes d’exploitation que nous
connaissons aujourd'hui ou au moins du noyau de ces systèmes comme par exemple
Unix/Linux. Le Langage C a justement été créé pour un seul et unique but au départ,
développer un système d'exploitation (Unix) mais au fil du temps, grâce à sa puissance, il a
été adopté par une large communauté de développeurs ce qui a permis au langage
d'évoluer et surtout d'être standardisé.
3|Page
Chapitre 1 : Mise en Mémoire
Exercice 1 :
4|Page
Figure 1 Gestion de la mémoire en programme C
On remarque que ce programme ne contient que la fonction principale main () sans aucune
variable (ni locale ni globale).
Le programme à été compilé correctement sans génération des messages de warnings/erreurs, qui
explique la génération d’un fichier binaire mémoire.o et un exécutable mémoire.exe :
5|Page
Figure 3 La génération du fichier binaire
6|Page
Remarque 1:
On voit bien t la taille des segments data, bss et text dont on a parlé précédament.
• Text = 1017 bytes. Data = 272 bytes, bss = 4 bytes.
• Dec = 1017 + 272 + 5 = 1293 bytes (En décimal).
• Hex = 50d C’est dec en hexadécimal.
Remarque 2 :
Pour le fichier memoire.o :
Les résultats obtenus pour le fichier memoire.o sont logiques car le programme ne contient
aucune variable. Par contre pour size Memoire (l’exécutable) on voit bien qu’il y a des
variables cachées que la commande « size Mémoire » a pris en compte.
5.
Pour cette question, on s’est déplacé vers le repertoire Memoire (qui contient le fichier
memoire.c) afin d’executer la commande suivante :
7|Page
7.
Explication de l’écart :
Dans ce nouveau programme nous avons ajouter des nouvelles variables (globales, locales,
initialisés et non-initialisé) ainsi que des constantes, ce qui va influencer sur les tailles de
tous les segments de la mémoire du programme C.
8.
Code :
8|Page
Résultat :
La commande nm mémoire.su
9.
Résultat par la commande more mémoire.su :
Calcul théorique :
Code :
9|Page
• Affichage des adresses :
- Avant l’utilisation de static :
Explication :
Déclarer une variable statique va lui donner une durée de vie égale à celle du programme
même si elle est déclarée localement dans une fonction, et, si elle est n'est pas locale à une
fonction, restreindre sa visibilité à la source dans lequel elle est déclarée. Il est à noter que
les variables statiques sont par défaut initialisées, elles sont en général placées dans une
section particulière et ne sont donc ni allouées sur la pile ni sur le tas.
11.
Définition et déclaration de la fonction :
10 | P a g e
Résultat :
12.
L’ajout de static :
Résultat :
Explication :
Quand on ajoute static la variable i va être créer dans le segment de données, donc elle ne
va pas être écrasée après la sortie de la fonction inc( ).
11 | P a g e
Chapitre 2 : Analyse de performance
2.a Accès par valeur :
1. pour répondre à cette question :
- l’ajout d’un nouvel répertoire (dans le repertoire du projet) qui contient les fichiers
téléchargés.
- Compiler et Executer.
2. Résultat obtenu :
On voit deux courbes sinusoïdales qui répondent aux vecteurs x et y avec l’amplitude de x
est plus grand que y.
Le programme appelle les fonctionnalités nécessaires pour appeler gnuplot afin d’afficher
les courbes souhaitées.
3.
12 | P a g e
4.
Explication :
Les variables déclarées dans des fonctions sont stockées dans la pile, comme x dans la
fonction Firvaleur, par contre la variable globale est stockée dans le segment de donnée de
la zone programme
Conclusion :
Dans ce TP nous avons traité un axe très important dans le domaine des systèmes
embarquées qu’est la gestion de la mémoire. Nous avons vu les différents segments qui
constituent la mémoire d’un programme C. Ainsi que l’utilité du passage par référence et
par valeur dans un programme C.
13 | P a g e