326
Le logiciel R - Maˆ ıtriser le langage
7.8.3 Taille des objets dans R
Une fonction R, utile par la suite, permet de renseigner sur la taille d’un
objet cr´ e´ e dans R. Il s’agit de la fonction object.size(). D’apr` es ce qui pr´ ec` ede, on s’attend `
a ce que le r´ esultat de l’instruction object.size(3L) renvoie
8 bytes, mais il n’en est rien.
> object.size(3L) # (Sur un processeur 64 bits).
48 bytes
En fait, chaque objet R contient (mˆ eme lors de la d´ eclaration d’un simple
entier par x <- integer(3) une entˆ ete (header en anglais) qui occupe un peu
d’espace dans la m´ emoire vive : 24 octets sur un processeur 32 bits et 40 octets
sur un processeur 64 bits. Cette entˆ ete sert ` a sauvegarder des informations sur
l’objet cr´ e´ e : son type (integer, double, complex, etc.), sa longueur, etc ..
Astuce
Pour connaˆ ıtre le processeur sur lequel R est en train de tourner, utilisez
l’instruction :
> .Machine$sizeof.pointer
[1] 8
La valeur 8 est renvoy´ ee pour un processeur 64 bits et la valeur 4
pour un processeur 32 bits. Une autre possibilit´ e est d’utiliser l’instruction
sessionInfo().
Les valeurs renvoy´ ees par les instructions suivantes sont donc maintenant
assez claires :
> # Sur processeur 32 bits:
> object.size(3L) - 24
8 bytes
> # Sur processeur 64 bits:
> object.size(3L) - 40
8 bytes
Expert
L’allocation de la m´ emoire dans R se fait de fa¸ con diff´ erente pour les petits et les gros vecteurs d’entiers. Les petits vecteurs sont d´ efinis en 6 classes,
d´ ependamment de leur longueur (inf´ erieure ou ´ egale ` a 2, 4, 8, 12, 16 ou 32),
et sont capables de stocker des donn´ ees de 8, 16, 32, 48, 64 ou 128 octets respectivement. Comme un integer occupe seulement 4 octets, il est possible
respectivement de stocker 2, 4, 8, 12, 16 et 32 integer dans ces 6 classes.
Un vecteur d’entiers de longueur n > 32 occupera une place de taille 4n + 40
si n est pair et de 4(n + 1) si n est impair, `
a laquelle il faudra ajouter (pour
Le logiciel R - Maˆ ıtriser le langage
7.8.3 Taille des objets dans R
Une fonction R, utile par la suite, permet de renseigner sur la taille d’un
objet cr´ e´ e dans R. Il s’agit de la fonction object.size(). D’apr` es ce qui pr´ ec` ede, on s’attend `
a ce que le r´ esultat de l’instruction object.size(3L) renvoie
8 bytes, mais il n’en est rien.
> object.size(3L) # (Sur un processeur 64 bits).
48 bytes
En fait, chaque objet R contient (mˆ eme lors de la d´ eclaration d’un simple
entier par x <- integer(3) une entˆ ete (header en anglais) qui occupe un peu
d’espace dans la m´ emoire vive : 24 octets sur un processeur 32 bits et 40 octets
sur un processeur 64 bits. Cette entˆ ete sert ` a sauvegarder des informations sur
l’objet cr´ e´ e : son type (integer, double, complex, etc.), sa longueur, etc ..
Astuce
Pour connaˆ ıtre le processeur sur lequel R est en train de tourner, utilisez
l’instruction :
> .Machine$sizeof.pointer
[1] 8
La valeur 8 est renvoy´ ee pour un processeur 64 bits et la valeur 4
pour un processeur 32 bits. Une autre possibilit´ e est d’utiliser l’instruction
sessionInfo().
Les valeurs renvoy´ ees par les instructions suivantes sont donc maintenant
assez claires :
> # Sur processeur 32 bits:
> object.size(3L) - 24
8 bytes
> # Sur processeur 64 bits:
> object.size(3L) - 40
8 bytes
Expert
L’allocation de la m´ emoire dans R se fait de fa¸ con diff´ erente pour les petits et les gros vecteurs d’entiers. Les petits vecteurs sont d´ efinis en 6 classes,
d´ ependamment de leur longueur (inf´ erieure ou ´ egale ` a 2, 4, 8, 12, 16 ou 32),
et sont capables de stocker des donn´ ees de 8, 16, 32, 48, 64 ou 128 octets respectivement. Comme un integer occupe seulement 4 octets, il est possible
respectivement de stocker 2, 4, 8, 12, 16 et 32 integer dans ces 6 classes.
Un vecteur d’entiers de longueur n > 32 occupera une place de taille 4n + 40
si n est pair et de 4(n + 1) si n est impair, `
a laquelle il faudra ajouter (pour
