322
Le logiciel R - Maˆ ıtriser le langage
Pour acc´ eder ` a une certaine zone de la m´ emoire, R utilise (de fa¸ con transparente et cach´ ee pour l’utilisateur) ce que l’on appelle un pointeur (quantit´ e
qui « pointe » vers la zone de m´ emoire d´ esir´ ee). Un pointeur est donc une variable qui contient une adresse m´ emoire. `
A l’adresse contenue dans un pointeur
donn´ e, on pourra par exemple trouver une donn´ ee. Notons que chaque donn´ ee
poss` ede un certain type, tels que integer, double, etc. (voir chapitre 1). Notons
aussi qu’un integer est cod´ e sur 4 octets, un double sur 8 octets, un character
sur 1 octet, un logical sur 4 octets, un complex sur 16 octets, pour ne citer que
les types de variables les plus courants. Ceci est vrai sur un processeur 32 bits
aussi bien que sur un processeur 64 bits. Examinons maintenant les instructions
R suivantes :
> x <- 3L # création de la valeur 3, de type integer,
> # ou de façon équivalente:
> x <- as.integer(3)
D’apr` es ce qui vient d’ˆ etre expliqu´ e, on peut supposer que s’op` ere simultan´ ement la r´ eservation (on parle aussi d’allocation) d’un espace m´ emoire de
32 cases contigu¨ es (4 octets, de 8 bits chaque) et la cr´ eation d’un pointeur qui
contiendra l’adresse de (la premi` ere de) ces cases. Le pointeur en question doit
en fait non seulement contenir l’adresse de la variable x, mais ´ egalement son
type pour savoir sur combien de cases cette variable est stock´ ee. Pour cette raison, les pointeurs sont dit « typ´ es ». Ainsi, quand on incr´ emente un pointeur
typ´ e (i.e. que l’on cherche ` a augmenter d’une unit´ e l’adresse qu’il contient), il
n’est en fait pas forc´ ement incr´ ement´ e de un, mais de la taille du type point´ e.
Figure 7.2 – Illustration du stockage par R d’un integer (sign´ e) dans la m´ emoire.
Chacune des petites cases contient un chiffre binaire (0 ou 1). Le nombre en
vert donne la valeur en ´ ecriture d´ ecimale du mˆ eme nombre (entier) exprim´ e en
´ ecriture binaire pr´ esent dans les quatre blocs situ´ es au-dessus. Le nombre en
rouge donne l’adresse (exprim´ ee ici dans une base d´ ecimale) du premier blocm´ emoire de 8 cases situ´ e au-dessous. Notons qu’ici un nombre est stock´ e sur
32 cases, et plus seulement sur 8 comme cela ´ etait illustr´ e sur la figure 7.1. De
plus, la premi` ere case permet de sp´ ecifier le signe du nombre, n´ egatif ici.
7.8.2.1 Probl` emes caus´ es par la gestion m´ emoire des entiers
Puisqu’un entier (sign´ e) est cod´ e sur 4 octets, ` a savoir 32 bits, l’entier maximal que l’on peut repr´ esenter est 2 147 483 647. En effet, si l’on r´ eserve le
premier bit pour le signe, il ne reste que 31 cases disponibles, soit 2
31 arrangements (avec r´ ep´ etitions) possibles. En comptant le 0, le plus grand entier
disponible est donc 2
31
− 1, soit :
Précédent

- 355/701

Suivant