Almacenamiento vs Memoria en Solidity

Las palabras clave de almacenamiento y memoria en Solidity son análogas al disco duro de la computadora y la memoria RAM de la computadora. Al igual que la RAM, Memory in Solidity es un lugar temporal para almacenar datos, mientras que Storage guarda datos entre llamadas a funciones. El contrato inteligente de Solidity puede usar cualquier cantidad de memoria durante la ejecución, pero una vez que la ejecución se detiene, la memoria se borra por completo para la próxima ejecución. Mientras que el almacenamiento, por otro lado, es persistente, cada ejecución del contrato inteligente tiene acceso a los datos previamente almacenados en el área de almacenamiento.

Cada transacción en la máquina virtual Ethereum nos cuesta una cierta cantidad de gas. Cuanto menor sea el consumo de Gas, mejor será su código Solidity. El consumo de Gas de la Memoria no es muy significativo en comparación con el consumo de gas del Almacenamiento. Por lo tanto, siempre es mejor usar Memoria para cálculos intermedios y almacenar el resultado final en Almacenamiento.

  1. Las variables de estado y las variables locales de las estructuras, la array siempre se almacenan en el almacenamiento de forma predeterminada.
  2. Los argumentos de la función están en la memoria.
  3. Cada vez que se crea una nueva instancia de una array con la palabra clave ‘memoria’, se crea una nueva copia de esa variable. Cambiar el valor de la array de la nueva instancia no afecta la array original.

Ejemplo n.º 1: en el siguiente ejemplo, se crea un contrato para demostrar la palabra clave ‘almacenamiento’.

Solidity

pragma solidity ^0.4.17;
 
// Creating a contract
contract helloGeeks
{
  // Initialising array numbers
  int[] public numbers;
 
  // Function to insert values
  // in the array numbers
  function Numbers() public
  {
    numbers.push(1);
    numbers.push(2);
 
    //Creating a new instance
    int[] storage myArray = numbers;
     
    // Adding value to the
    // first index of the new Instance
    myArray[0] = 0;
  } 
}

Producción:

Cuando recuperamos el valor de los números de array en el código anterior, tenga en cuenta que la salida de la array es [0,2] y no [1,2]

Esto se puede entender a partir del siguiente diagrama:

keyword storage

Usando la palabra clave «almacenamiento»

Ejemplo #2: En el siguiente ejemplo, se crea un contrato para demostrar la palabra clave ‘memoria’.

Solidity

pragma solidity ^0.4.17;
 
// Creating a contract
contract helloGeeks
{ 
  // Initialising array numbers
  int[] public numbers;
   
  // Function to insert
  // values in the array
  // numbers
  function Numbers() public
  {
    numbers.push(1);
    numbers.push(2);
     
    //creating a new instance
    int[] memory myArray = numbers;
     
    // Adding value to the first
    // index of the array myArray
    myArray[0] = 0;
  } 
}

Producción:

Cuando recuperamos el valor de los números de la array en el código anterior, tenga en cuenta que la salida de la array es [1,2]. En este caso, cambiar el valor de myArray no afecta el valor de los números de array.

Esto se puede entender a partir del siguiente diagrama:

keyword memory

Usando la palabra clave «memoria»

Publicación traducida automáticamente

Artículo escrito por yathartharora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *