superloupiot a écrit :OK, merci.
Apparemment, la taille prise par item.s est de 8 octets.
Je ne comprend pas trop comment cela ce fait vu que à priori, item.s n'étant pas initialisé, on ne sait pas combien de caractères seront inscrits dedans?
Un tableau a une taille fixée lors de la création. On peut le redimensionner avec la commande Redim mais ce tableau aura toujours une fixe après redimensionnement.
Pour travailler avec une chaine, PureBasic stocke une adresse qu'il va utiliser pour accéder aux données de la chaine qui sont en mémoire. Dans la structure ligne,
item.s est un élément fixe qui stockera cette adresse,
donc sa taille est fixe. C'est une adresse, sa taille dépend du type de processeur, 32 bits ou 64 bits. En 32 bits, la taille est de 4 octets et en 64 bits, la taille est de 8 octets.
Sizeof permet de retrouver la taille de item pour la structure comme ceci
Lorsque l'on attribuera une chaine à un élément item du tableau, c'est PureBasic qui alloue de manière dynamique, l'espace en mémoire pour stocker la chaine, de même c'est PB qui désalloue cet espace mémoire pour la chaine; item aura toujours une taille fixe en mémoire, c'est un élément du tableau, pour retrouver la taille de la chaine, il y a deux commandes
len() et StringByteLength()
la deuxième permet d'avoir les valeurs précises en fonction du mode de compilation (Ascii, unicode ou UTF-8)
Une analogie peut être faite par une boîte aux lettres et son contenu.
L'adresse est celle de la boite aux lettres et la chaine est le courrier dans la boîte.
On peut mettre une lettre ou 30 lettres dans la boite mais la taille de la boite ne change pas.