Variable de almacenamiento local

Estoy leyendo los documentos de solidez aquí y parece que me cuesta entender lo siguiente.

Las ubicaciones de los datos son importantes porque cambian el comportamiento de las asignaciones: las asignaciones entre el almacenamiento y la memoria y también a una variable de estado (incluso desde otras variables de estado) siempre crean una copia independiente. Sin embargo, las asignaciones a las variables de almacenamiento local solo asignan una referencia, y esta referencia siempre apunta a la variable de estado, incluso si esta última se cambia mientras tanto. Por otro lado, las asignaciones de un tipo de referencia almacenado en la memoria a otro tipo de referencia almacenado en la memoria no crean una copia

1) ¿No se almacena siempre una variable de estado en el almacenamiento? Entonces, ¿qué significa lo anterior por asignaciones entre almacenamiento y memoria y también a una variable de estado?

2) ¿Qué es exactamente una variable de almacenamiento local?

pragma solidity ^0.4.0;

contract C {

    uint state_variable; // same as global storage variable

    function test() returns uint{
        uint local_variable = 10; //same as local storage variable
        return local_variable * state_variable;
    }
}

¿Es correcto mi entendimiento anterior? ¿Hay alguna manera de ver si estas variables están en la memoria o en el almacenamiento? Estoy mirando los códigos de operación desmontados en el IDE de remezcla pero no puedo distinguirlos.

¡Gracias!

Respuestas (2)

La asignación de valor a una variable se puede realizar dando una referencia o creando una copia independiente. Si es una referencia cuando el original que está asignado a la variable cambia, el valor de la variable también cambia. Considera lo siguiente,

a = 10 // value of a is 10
b = a // variable b is assigned a value
a = 20

si la asignación anterior asignó una referencia ahora, el valor de b también será 20. Si la asignación se realizó mediante la creación de una copia independiente, el valor de b seguirá siendo 10.

En el documento de solidez, lo que dice es que si la asignación es entre el almacenamiento y la memoria, o si la asignación es a una variable de estado, siempre creará una copia independiente. Si es una variable de almacenamiento local, solo hará una referencia.

Haciendo referencia al ejemplo proporcionado en los documentos de solidez, la variable de almacenamiento local es una variable definida dentro de una función. (El alcance de la variable se limita a la función)

Además de la respuesta aceptada, creo que también es necesario identificar qué ubicaciones de datos son.

La documentación proporciona una buena descripción de las ubicaciones de datos disponibles .

ubicación de datos

Cada tipo de referencia tiene una anotación adicional, la "ubicación de datos", sobre dónde se almacenan. Hay tres ubicaciones de datos: memory, storagey calldata. Calldata es un área no modificable y no persistente donde se almacenan los argumentos de la función y se comporta principalmente como una memoria. Es necesario para parámetros de funciones externas, pero también se puede utilizar para otras variables.