# Tipos de Almacenamiento: call data, memory, etc

Las **variables** pueden tener una ubicación distinta dentro de su almacenamiento en el contrato dependiendo del uso que se les vaya a dar y cómo se utilicen.

### Tipos de almacenamiento de datos

Para especificar la **localización de los datos en un contrato**, veremos a continuación tres posibilidades y dependiendo la misma, una variable tendrá un comportamiento u otro.

### `Storage`

Indica que una variable será guardada dentro de la Blockchain. Siempre podremos obtener un valor desde el *storage* dado que todo en Blockchain es inmutable. A este tipo de memoria se le conoce como memoria persistente.

### `Memory`

Las variables del tipo *memory* solo pueden ser usadas mientras se llama a una función. Después de esto, la misma se borrará. Este tipo de variable puede modificarse mientras está en uso.

### `Calldata`

Similar a *memory*, con la diferencia de que aquí las variables no se pueden modificar mientras estén en uso. Si se sabe de antemano que una variable no necesitará modificarse, es buena práctica usar *calldata* para reducir el consumo de gas.

Por defecto, las variables de estado del contrato son guardadas en el *storage*, mientras que los parámetros de una función son guardados en *memory*. Los únicos tipos de datos a los que se les puede asignar un almacenamiento distinto son los tipos *string*, *array*, *struct* y *mapping*.

**El tipo de almacenamiento de una variable cambiará el ciclo de vida de la misma**. Haciendo que esta sea modificable o persistente dentro del contrato. Es muy importante entender la diferencia entre cada tipo para saber cuándo es conveniente utilizar cada uno y mejorar el rendimiento de un contrato.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://platohedro-1.gitbook.io/b.a.m/introduccion-a-la-blockcahin/solidity/tipos-de-almacenamiento-call-data-memory-etc.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
