C'est pas compliqué.
Voici 2 strings :
Code : Tout sélectionner
A$ = "Ceci est un test pour KCC , c'est relativement simple au final."
B$ = "Coucou"
C'est deux Variables totalement différentes n'ont pas du tout la même taille
A$ Vaut 64 bytes
B$ Vaut 7 bytes
si tu compte Coucou ( 6 caractères ) , j'ai écrit 7 , car on rajoute un #null a la fin pour signalé la fin de chaine.
en Ascii coucou est comme ceci :
67,111,117,99,111,117,#NULL
C'est un fragment de mémoire qui se suit , c'est contigu.
si l'adresse de 67 vaut 0 , #NULL vaut 6.
évidement , une adresse commence jamais à zéro , c'est pour imagé ici.
Imagine donc que la variable B$ à comme adresse mémoire 127356
on en déduis donc que la lettre 'C' de Coucou , est à la même adresse puisque c'est le début de chaîne.
'o' à donc 127356 + 1 comme adresse soit 127357
'u' à donc 127356 + 2 comme adresse
'c' à donc 127356 + 3 comme adresse
'o' à donc 127356 + 4 comme adresse
'u' à donc 127356 + 5 comme adresse
#NULL 'o' à donc 127356 + 6 comme adresse
Tu peut stocker cette adresse dans une variable pour la sauvegardé :
Adresse_de_u = @A$+5
On connais donc sont emplacement dans la mémoire du programme, on peut donc modifié juste le u si on le désire , via pokec() ( écrit 1 byte )
Code : Tout sélectionner
A$ = "Coucou"
Adresse_de_u = @A$+5
PokeC(Adresse_de_u,65) ; 65 = Code Ascii de 'A'
Debug A$
Dans se petit code , on à écrit 1 byte à l'adresse @A$ + 5 soit 127361
Pour en revenir à notre tableau de string , on comprend la difficulté à stocké les données puisque elles ont des tailles variable en mémoire
(A$=7 , B$=64)
Rappel toi de cette variable 'Adresse_de_u' , elle stocke l'adresse d'une partie du mot Coucou dans A$
on aurait pu faire cela aussi
Mais ce n'est pas un véritable tableau de string au sens strict du terme.
Un tableau de string ne contient pas vraiment les strings , il contient juste des adresses , un peu comme 'Adresse_de_u'
Pour le faire avec des AllocateMemory() , c'est simple , une adresse est stocké sur 4 bytes , si j'ai 2 éléments , mon tableau fera alors 8 bytes
on pourra alors stocker 2 string , du moins les adresses.
Donc , un tableau de strings avec nos premières variable fera 8 bytes , même si les strings sont des romans !
car , je le repète , le tableau ne contient que les adresses !
voici en code
Code : Tout sélectionner
A$ = "Ceci est un test pour KCC , c'est relativement simple au final."
B$ = "Coucou"
Adresse_De_A = @A$
; ou *Adresse_De_A , c'est pareil , c'est des pointeurs...
Adresse_De_B = @B$
MaMemoireTableau = AllocateMemory( 2 * 4) ; 2 element à 4 byte chacun
;On écrit les 4 premier bytes ( l'adresse de A$ )
PokeI(MaMemoireTableau,Adresse_De_A)
; Les 4 suivants , on oublie pas , à la suite de ceux que l'on vient d'écrire ( 4 bytes plus loin )
PokeI(MaMemoireTableau + 4,Adresse_De_B)
; MaMemoireTableau est organisé comme un vrai tableau de string
Dim TAB.s(0)
TAB() = MaMemoireTableau
Debug TAB(0)
Debug TAB(1)
Edit :
MaMemoireTableau est donc une zone CONTIGUE dans la mémoire...
Comme ceci
___4 bytes______4 bytes
[XX XX XX XX] [YY YY YY YY]
___Adresse A____Adresse B