Structures et listes chaînées

14 Mar

Structures et listes chaînées

a) Les Structures

Jusqu’à présent, nous manipulions exclusivement des variables typées du langage C.
Dans les langages d’aujourd’hui, on retrouve souvent la notion d’objet. Le langage C n’est pas un langage orienté objet, c’est un langage procédural.

Cependant, on retrouve quelque chose de très similaire : les structures.
Une structure est une compilation de variables typées personnalisée. On peut également retrouver des structures à l’intérieur d’une structure.

Lire la suite

Publicités

Les fonctions C : mieux les comprendre en langage d’assemblage

12 Mar

Les fonctions en bas niveau

Cet article est à lire en ayant devant ses yeux l’article « Pointeurs : les bases » et en se reportant à la fonction « swap » de cet article.

Nous allons illustrer plus en profondeur, mais de manière simplifiée, la notion de pile pour bien comprendre. Chaque thread s a sa propre zone de pile, qui est bien-sûr en réalité juste un bloc contiguë d’octets en mémoire dynamique, mais limité (d’où les Stack Overflow = dépassement de pile) à 8Mo sous Linux par exemple . Cependant, on la conceptualise de la manière suivante pour comprendre son fonctionnement.

Lire la suite

Chaînes de caractère (manipulation, saisie..)

7 Mar

Les chaînes de caractère

En C, aucun type ne correspond à « chaîne de caractères ». Il n’y a que des caractères de type char, stockés sur un octet (plus petite unité adressable dans la mémoire).

#include <stdio.h>

int main () {

char lettre = ‘X’;
printf (« La lettre est : %c\n », lettre);
return 1;

}

On notera que char lettre = ‘X’; équivaut à char lettre = 88;.
On sait bien-sûr que la mémoire ne stocke que des nombres (des 1 et des 0). Il a donc fallu pouvoir représenter les lettres par des nombres. Le code ASCII correspondant à la lettre X est donc 88. En mémoire, il y a donc 88 (binaire), ce qui est interprété par ‘X’ lors de l’affichage.

a) Initialisation

Pour créer une chaîne de caractères, il faut donc … créer un tableau de caractères. Ce n’est pas plus compliqué que ça.

Lire la suite

Allocation dynamique

6 Mar

Allocation dynamique

Dans la section ci-dessus, nous avons vu des tableaux alloués de manière statique. L’espace mémoire était réservé pour le tableau et pas alloué à la demande. Dans l’ancienne norme du C (C89), on ne pouvait pas créer un tableau en mettant entre crochets une variable. Il fallait mettre des données brutes.
Les tableaux statiques sont donc alloués à la compilation, contrairement aux allocations dynamiques, faites à l’exécution (à la demande).

C’est entre autres pour cela qu’on a inventé l’allocation dynamique de mémoire, c’est-à-dire, à la demande du développeur.

Lire la suite

Pointeurs et tableaux : Utilisations et différences

6 Mar

Les tableaux statiques

1) Unidimensionnel

Un tableau est une structure de données particulière qui représente en fait une liste d’éléments de même type (variables, structures, …), située dans un espace contigu en mémoire. On accède à chaque élément d’un tableau grâce à un index.

On crée un tableau en renseignant le type d’élément que l’on veut y insérer et le nombre d’éléments.

#include <stdio.h>

int main () {

int tab[5];

tab[0] = 4; tab[1] = 2; tab[5] = 2; tab[3]= 3; tab[4] = 26000;

}

Lire la suite

Pointeurs (les bases)

6 Mar

Les pointeurs

1) Les variables dans la mémoire

Comme vu plus haut, le C nous permet de créer des variables typées, de les initialiser, de les assigner, de les comparer, etc.
Les principaux types de variable en C sont les entiers (short, int, long), les flottants (float, double) et les caractères (char).

Les variables sont caractérisées par leur adresse (l’emplacement mémoire où elles se situent), leur type (entier, caractère, etc.), leur taille étant décrite par le type, et leur valeur (ce qu’elles contiennent).
La mémoire vive est adressée en octets, c’est pourquoi chaque type de variable occupe un nombre entier d’octets (autrement dit, un octet = une « case mémoire »). Certains types de variable occupent 1 octet, 2, 4, mais jamais 1,5 octet par exemple.

Lire la suite

Routage des paquets à travers Internet (1/2)

25 Mar

3) Routage des paquets à travers Internet

Internet est un système mondial de millions de réseaux interconnectés, dont votre petit réseau local fait partie (indirectement avec le protocole NAT que nous allons aborder dans ce chapitre) au même titre qu’une grande baie de serveurs web. Lorsque vous souscrivez à une offre Internet proposée par un FAI, vous ne faites que demander un routeur vous permettant de joindre le réseau du FAI (par le biais du câblage téléphonique), qui lui est directement connecté à Internet (réseau « publique » et non local) : il possède donc une adresse IP publique dite « routable » car unique au monde à un instant T.
Afin de communiquer à l’intérieur des réseaux et entre des réseaux différents, il a fallu établir une stratégie de communication.
La base a été d’adresser physiquement les équipements puis logiquement afin de créer la notion de réseaux, puis d’exploiter ces réseaux et leur structure pour acheminer le plus simplement et le plus efficacement possible un paquet d’un PC lambda à un autre (pouvant être à l’autre bout du monde sur un réseau différent) : c’est le routage logique des paquets.

Dans ce chapitre, nous allons aborder le protocole NAT (une solution temporaire à la pénurie d’IPv4) et ce fameux routage.

Lire la suite