Taille des tableaux

Résolu
ZZEBULON Messages postés 17 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 23 février 2010 - 23 août 2004 à 20:58
ZZEBULON Messages postés 17 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 23 février 2010 - 1 sept. 2004 à 21:40
Les variables integer sont codées sur 16 bits.
Les tableaux dimensionnés en integer devraient donc occuper 16 bits par variables. Par exemple dans le code suivant:

Dim tab(1 to 2) as integer

le tableau tab devrait occuper 32 bits en mémoire.
Mais lorsque on veut l'enregistrer dans un fichier ouvert avec l'instruction Open, on s'aperçoit que sa taille dépasse les fameux 16 bits.

D'où vient cette différence, peut-on la quantifier ?

3 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
23 août 2004 à 23:21
Salut
Pour compléter :
si ton fichier .txt est ouvert en mode Binary et tes variables écrites avec l'instruction Put, tu retrouves la taille attendue :

ReDim Tabl(1 To 2) As Integer
Tabl(1) = 1
Tabl(2) = 1000
Open "h:\essai.txt" For Binary As #1
Put #1, , Tabl(1)
Put #1, , Tabl(2)
Close

te donne un fichier de 4 octets (32 bits) : 01 00 E8 03soit 0001 1 et 03E8 1000
3
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
23 août 2004 à 21:57
Salut, je pense que la différence vient du fait que tu enregistres ta variable integer sous forme de texte avec open.
Par ex, si ta var = 1, tu fais un print#numfic, var, ds ton fichier texte, tu auras en hexa 20 31 20 0D 0A donc 5 octets.
C à d que chaque valeur que tu écris dans ton fichier sera encadrée par des espaces (en hexa 20) et chaque ligne ou enreg terminé par un retour chariot + un saut de ligne (0D 0A en hexa).
Si ta var = 10, tu auras en hexa 20 31 30 20 0D 0A donc 6 octets et ainsi de suite.
Le fichier texte n'est pas représentatif de ce qui se passe en mémoire. 32767 (limite max positive de l'integer) ne prend que 16bits (donc 2 octets) en mémoire mais ça prend 9 octets (72 bits) ds le fic texte.

Cordialement, CanisLupus

Tous les glands ne deviennent pas des chênes mais tous les chênes ont été des glands
0
ZZEBULON Messages postés 17 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 23 février 2010
1 sept. 2004 à 21:40
OK, Merci, Tout s'explique !!!
0
Rejoignez-nous