Tu vois, si tu avais lu, tu saurais ...
Pour ma part, le Define je connaissait déja, merci c'est sympa ...
Donc maintenant, fini de rigoler, hein..., je vais te montrer ce qui ce passe "derrière"...
Du moins je vais essayer, car je n'ai pas ton niveau en assembleur Dobro..
Donc prenons l'exemple de quelqu'un qui marquerais un code du type...
Pour te simplifier la lecture je vais t'enlever un de tes cauchemars ... les Define d'accord ?
allez on y va...
On le compile et ensuite hop sur IDA ... et on regarde ....
Nous pouvons nous apercevoir de l'appel "CALL sub_402030" qui correspond à la création de la variable toto, car ensuite il pousse le texte "toto" dedans.
En effet ce n'est pas une variable sur la pile, mais bien un appel... un appel ? allons voir ! hop on saute ...
Et hop nous voici sur le moment de la création de la variable... ho ! un HeapAlloc dis donc !
Bah oui, pas de mystère, quand on ne connais pas la taille, on alloue de la mémoire.
Aller on saute a sur le HeapAlloc, pour voir, juste ...
On peut s'apercevoir, qu'en fait il une allocation mémoire, et qu'il est possible de l'étendre autant que l'on veut, mais, c'est gourmand, car systématiquement il passe dans cette fonction, contenu dans la librairie MSVCRT.DLL, afin de pouvoir réalloué dynamiquement, la taille... Très gourmand...
---------------------------
Maintenant prenons l'exemple, d'une variable à taille définie...
On reprend notre programme ...
on le compile ... et on l'ouvre avec le produit que maitrise Dobro parfaitement... IDA...
Que ce passe t'il ?
Bien c'est simple, déja pas d'appel HeapAlloc à l'horizon, en fait il "pousse" le tas jusqu’à la valeur défini par la déclaration grâçe au "jnz".
Une fois terminé, il remplira avec le texte "push offset...."
Nous pouvons nous apercevoir donc, ya pas photo, une taille de chaine de caractère définie à l'avance, c'est quand même plus rapide...
Donc pour les débutants, comme moi en Purebasic, attention, quand on veut gagner du temps, toujours utiliser des chaine de caractère a taille défini, ça va plus vite ... !
Je ne sais pas si je me suis bien exprimé, mais voilà, donc conclusion :
toto.s et toto$ = allocation mémoire, plus de lourdeur, fonctionne comme une allocation mémoire, utilise la librairie msvcrt.dll du système dans le cas d'un Windows
toto.s{255} = variable automatique, alloué sur le tas, plus rapide, mais obligatoirement défini par une taille.
Y'en avait un seul qui ma compris depuis le début ... c'est djes...
Voilà, tu vois Dobro, faire attention quand on lit un topic, de na pas trop déborder sur un autre sujet et de s'assurer que l'on a bien compris ce que la personne demandais...
Moi perso je m'arrête là, je voulais vous montrer donc, quelques chose que je pensais autrement, car j'avais moi même mal lu la docu PB...
En effet je pensais que en utilisant toto$="tutututu", il aurait une variable automatique de 8 caractères. Mais en fait non !
Du coup j'ai refais ma fonction avec des tailles fixe pour économiser la mémoire. Voilà voilà
FIN