31 M ´
EMOIRE
1 M´emoire
Dans un premier temps, nous allons nous int´eresser au stockage des donn´ees semi-permanent : le temps de
l’ex´ecution de votre programme, vous devez vous rappeler d’un certain nombre de choses, allant de la variable
temporaire pour une m´ethode jusqu’`a la liste de toutes les actions effectu´ees depuis le lancement du programme.
Ce stockage semi permanent est fait en m´emoire, qui est souvent la mˆeme chose que la RAM. Lorsque votre
programme quitte, ces informations sont perdues.
1.1 Valeurs, Variables, et Cases M´emoires
1.1.1 Scalaires et Conversions
A la grande diff´erence de langages comme le C, l’acc`es direct `a la m´emoire est interdit. Prenons une d´eclara-
tion : int32 a= 10 En C, cela revient `a d´efinir une case m´emoire de 32 bits de long, contenant la valeur 10. Que
signifie int32 dans ce contexte ? La partie int est surtout pour le programmeur. En effet, si vous faites double b =
(double)a, le comportement n’est pas d´efini. Ou bien on a une conversion, ou bien on a une r´einterpr´etation des
octets. En Java, l’acc`es m´emoire est interdit, le langage est fortement typ´e. Lorsque vous d´eclarez une variable
comme ´etant un int, un float ou un char, son type est important. Un cast en Java est forc´ement une conversion.
1.1.2 Pointeurs et Objets
En Java, puisque l’acc`es direct `a la m´emoire est interdit, il n’y a aucun pointeur. Les scalaires sont stock´es
dans leurs cases m´emoire, et ne peuvent pas ˆetre partag´es. Ce qui s’en rapproche le plus, ce sont les objets.
D’apr`es ce que l’on a vu pr´ec´edemment, il s’agit d’une collection de variables et de m´ethodes. Pour stocker une
telle collection, il faut donc une allocation dynamique. On peut donc d´ecemment supposer que new cache en
fait un malloc. Un autre indice conforte cette hypoth`ese :
int a,b;
a = 5;
b = a;
a = 3;
Dans ce cas, `a la fin, a vaut 3 et b vaut 5. Mais si, `a supposer que Entier repr´esente la classe des entiers, et
qu’elle utilise comme variable interne n, on prend :
Entier a,b;
a = new Entier(5);
b = a;
a.n = 3;
Dans ce cas, a et b contiennent la valeur 3. Autrement dit, a et b sont des pointeurs sur la mˆeme structure.
Il faut garder `a l’id´ee cet effet secondaire, tout en sachant qu’en pratique, vos objets ne pourront jamais tout `a
fait ˆetre manipul´es comme des pointeurs.
1.1.3 Vers les structures
Comme on l’a vu dans l’exemple pr´ec´edent, un objet est un “pointeur sur une collection de variables et
de m´ethodes”. Une structure en C est une fa¸con d’agencer un certain nombre de valeurs dans un mˆeme bloc
m´emoire. On peut facilement voir que l’objet est une esp`ece de “super-structure” qui contient `a la fois :
– une s´erie de variables, comme dans une struct
– une s´erie de fonctions qui ont un impact sur ces variables
– des informations sur la classe dont est issu cet objet (type, h´eritage, m´ethodes des superclasses, etc)
Qu’est-ce qui nous empˆeche d’utiliser ces objets comme des structures de stockage ?
1.2 Structures et objets
1.2.1 Variables d’instance
Imaginons la structure C suivante :
La documentation Java se trouve `a l’adresse suivante : http ://java.sun.com/javase/reference/index.jsp