Sans le mot clé Mémoire , Solvency essaie de déclarer des variables stockée .
Lead Solidity devris chriseth: « Vous pouvez considérer le stockage comme une grosse carte avec une structure virtuelle … une structure que vous ne pouvez pas changer pendant la conduite – elle est déterminée par les variables d’état de votre contrat ».
Autrement dit, la structure de stockage est définie dans la pierre au moment de la création du contrat en fonction de vos déclarations de niveau de contrat variables et ne peut pas être modifiée avec les futurs appels de méthode. MAIS – le contenu de ce stockage peut être modifié avec les appels sendTransaction. De tels appels changent « d’état », c’est pourquoi les variables au niveau du contrat sont appelées « variables d’état ». Puis un élément de stockage uint8 variable; déclarée au niveau du contrat peut être remplacée par n’importe quelle valeur de uint8 (0-255), mais cette « place » pour une valeur de type uint8 existera toujours.
Si vous déclarez des variables dans des fonctions sans le mot-clé Mémoire , la solvabilité essaiera d’utiliser la structure de stockage, qui est en cours de compilation, mais peut produire des résultats inattendus. Mémoire raconte la solvabilité pour créer un bloc d’espace pour la variable lorsque la méthode est exécutée, ce qui garantit sa taille et sa structure pour une utilisation future dans cette méthode.
Mémoire ne peut pas être utilisé au niveau du contrat. Uniquement dans les méthodes.
Voir l’entrée « Quel est le mot-clé pour la mémoire? Que fait-il? » dans la FAQ. Je cite ceci:
La machine virtuelle Ethereum possède trois zones où elle peut stocker des objets.
Le premier est le «stockage», où se trouvent toutes les variables d’autorisation de contrat. Chaque contrat a son propre stockage, il existe une persistance entre les appels fonctionnels et son utilisation est assez coûteuse.
Le second est « mémoire », il est utilisé pour stocker des valeurs temporaires. Il est supprimé entre les appels de fonction (externes) et l’utilisation est moins chère.
La troisième est la pile, qui est utilisée pour contenir de petites variables locales. L’utilisation est presque gratuite, mais ne peut contenir qu’un nombre limité de valeurs.
Pour presque tous les types, vous ne pouvez pas spécifier où les stocker, car ils sont copiés chaque fois que vous les utilisez.
Les types où l’emplacement dit de stockage est important sont les structures et les matrices. Par exemple, si vous transférez de telles variables vers des appels de fonction, leurs données ne sont pas copiées si elles peuvent rester en mémoire ou rester en mémoire. Cela signifie que vous pouvez modifier le contenu de la fonction appelée et que ces modifications seront toujours visibles dans l’appelant.
Il existe des valeurs par défaut pour l’emplacement de stockage en fonction du type de variable concerné:
- les variables d’état sont toujours stockées
- Les arguments fonctionnels sont toujours en mémoire
- Variables de stockage de référence par défaut de type structure, tableau ou mappage par défaut
- les variables locales de type valeur (ie pas de matrice, pas de structure, pas de mapping) sont stockées dans la pile