« INFO916 : Cours de C » : différence entre les versions
Ligne 44 : | Ligne 44 : | ||
* La pile |
* La pile |
||
* Le tas |
* Le tas |
||
La différence principale est que la pile est une zone continue (connexe) de la mémoire tandis que le tas est fragmenté. L'utilisation de ces deux zones en C est aussi très différente. |
|||
=== Type de base === |
=== Type de base === |
Version du 13 septembre 2007 à 19:06
Introduction
Qu'est ce qu'un langage de programmation :
Ce sont des intruction indiquant à un ordinateur ce qu'il doit faire.
Un langage est caractérisé par trois éléments :
- syntaxe : quel sont les programmes valides
- sémantique : que font faire ces programmes à la machine
- des usages et conventions : des pratiques usuelles pour mieux programmer
Ce cours portera sur les trois aspects, notemment, on devra être capable d'évaluer un programme C à la main.
Historique et classification des languages
C est un
- langage impératif et procédural
- "assembleur" portable
Modèle mémoire et type de données
Modèle mémoire
Afin de pouvoir donner la sémantique du langage, il nous faut un "modèle" simplifié de machine. Essentiellement, un programme C agit sur deux choses:
- La mémoire
- Les entrées/sorties (fichier)
On s'intéressera aux entrées/sorties en fin de cours.
La mémoire est en fait un tableau (= vecteur) d'octets (byte en anglais). Un octet est un entier sur 8 bits (bits aussi en anglais) donc compris entre 0 et 255 = 28 - 1. Donc mathématiquement un élément de {0;1;2;...;255}N où N dépend de l'architecture de la machine (N = 230, N = 231 ou N = 232 sur une machine 32 bits et N = 248 ou plus sur une machine 64 bits).
Attention: N ne dépend pas de la quantité de mémoire installée dans la machine !
Puisque la pile est un tableau, on peut parler de son i-ème élément x. L'index d'un élément dans la mémoire s'appelle l'adresse de cet élément.
Seul une partie de la mémoire est accessible en lecture écriture pour le programme C (on peut aussi avoir des zones mémoire accessible en lecture seule). Lorsqe l'on essaye d'accéder au contenu d'une adresse qui n'est pas accessible le programme s'arrête brusquement sur une erreur de type bus error ou segmentation fault (si l'adresse existe dans la mémoire mais que l'on est pas autorisé à y accéder) De plus, la mémoire accessible est divisée en deux zones:
- La pile
- Le tas
La différence principale est que la pile est une zone continue (connexe) de la mémoire tandis que le tas est fragmenté. L'utilisation de ces deux zones en C est aussi très différente.