By using this site, you agree to the Privacy Policy and Terms of Use.
Accept
World of SoftwareWorld of SoftwareWorld of Software
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Search
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
Reading: Memory, Calldata, and Storage in Solidity: Understanding the Differences | HackerNoon
Share
Sign In
Notification Show More
Font ResizerAa
World of SoftwareWorld of Software
Font ResizerAa
  • Software
  • Mobile
  • Computing
  • Gadget
  • Gaming
  • Videos
Search
  • News
  • Software
  • Mobile
  • Computing
  • Gaming
  • Videos
  • More
    • Gadget
    • Web Stories
    • Trending
    • Press Release
Have an existing account? Sign In
Follow US
  • Privacy
  • Terms
  • Advertise
  • Contact
Copyright © All Rights Reserved. World of Software.
World of Software > Computing > Memory, Calldata, and Storage in Solidity: Understanding the Differences | HackerNoon
Computing

Memory, Calldata, and Storage in Solidity: Understanding the Differences | HackerNoon

News Room
Last updated: 2025/08/22 at 8:56 AM
News Room Published 22 August 2025
Share
SHARE

:::warning
DISCLAIMER:

  • The code in this article is for educational purposes only.

:::

If you are finding it difficult to comprehend either storage, memory, or calldata, you are not alone. This is an area most beginner developers struggle to grasp, and even some experienced Solidity developers still don’t fully understand.

What are these ‘special words’? They are words that specify the main data locations in a Solidity smart contract. Data locations in Solidity describe where data can be stored and how it can be accessed on the Ethereum blockchain. Other data locations include the following:

  • Stack
  • Code
  • Logs

In this article, you will learn the differences between each main data location option and where to use each.

Firstly, what is storage?

Storage

Storage is the data location that holds a smart contract’s state variables. A state variable is data that lives permanently on the blockchain. Each smart contract has its own storage space (an array of 2^256 32-byte slots), and state variables are automatically assigned to storage.

The code snippet below shows a simple implementation of a state variable stored in storage, as well as its getter and setter functions: n

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Storage {
    /////////////////////////////
    // STATE VARIABLES //////////
    /////////////////////////////
    uint256 public s_storedData; // s_storedData is a storage variable, s_ denotes a storage variable
    /////////////////////////////
    // SETTER FUNCTION //////////
    /////////////////////////////
    function set(uint256 x) public {
        s_storedData = x; // This value is saved permanently on-chain
    }
    /////////////////////////////
    // GETTER FUNCTION //////////
    /////////////////////////////
    function getStoredData() public view returns(uint256) {
        return s_storedData;
    }
}

In the code above, the  s_storedData remains on the blockchain after the set() function runs.

More importantly, storage is one of the major data location options that isn’t explicitly specified. Any variable declared outside any function is implicitly converted to a storage variable.

Use-case

The Bank contract above acts as a simple bank, as the name implies. The balancesmapping is stored in storage, which means it remembers values across function calls.

For instance, if Alice calls deposit(100), her balance is saved in storage in the balances mapping. Conversely, if she calls withdraw(60), she receives 60 and the mapping updates to 40.

Memory

Unlike Storage, Memory is a temporary, function-scope data location. Function-scope means, variables exist only during a function call, not at the contract-level, and clears afterwards. Additionally, memory allows for read-write access; this means variables are modified within a function. Solidity allocates memory to variables defined inside a function(local variables) or parameters marked memory.

To demonstrate:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Memory {
    function multiply(uint256 a, uint256 b) public pure returns (uint256) {
        uint256 result = a * b; // 'result' is stored in memory
        return result; // 'result' does NOT persist after the function ends
    }
}

In the code above, Solidity implicitly stores result in memory, which does not persist after the function execution.

Use-case

The code below concatenates two string inputs, string memory first, string memory second exist while the function combineStrings runs.

A note on function parameters

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Memory {
    function multiply(uint256 memory a, uint256 memory b) public pure returns (uint256) {
        uint256 result = a * b;
        return result; 
    }
}

For function parameters, you can’t specify the memorykeyword for uint, bool, addressand enum variables as they are directly stored on the contract’s stack, no explicit keyword.

Whereas for reference types like strings, bytes, arrays, structs, and mapping, you will have to specify or defaults to memory for internal and private functions and calldata for external and public functions(more on this below👇).

Calldata

Lightly touched on in the previous section, calldata is another temporary data location, but it’s reserved for external function parameters.  Also, unlike memory, calldata cannot be modified. To explain what this means, let’s take a look at the code below:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Example {
    function tryChangeCalldata(uint[] calldata nums) external pure returns (uint[] calldata) {
        nums[0] = 999; // ❌ ERROR — "calldata is read-only"
        return nums;
    }
}

The error message above shows that calldata is read-only. To modify calldata variables, they must first be loaded into memory.

Take the adjusted code below now modified .The code below works because the it loads nums variable to memory before modifying it in the if block.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
contract Example {
    function tryChangeCalldata(uint[] calldata nums) 
        external 
        pure 
        returns (uint[] memory) 
    {
        // Copy from calldata to memory
        uint[] memory numsCopy = new uint[](nums.length);
&nbsp; &nbsp; &nbsp; &nbsp; for (uint i = 0; i < nums.length; i++) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numsCopy[i] = nums[i];
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; // Now modify the copy
&nbsp; &nbsp; &nbsp; &nbsp; if (numsCopy.length > 0) {
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numsCopy[0] = 999;
&nbsp; &nbsp; &nbsp; &nbsp; }
&nbsp; &nbsp; &nbsp; &nbsp; return numsCopy;
&nbsp; &nbsp; }
}

Why Data Locations Matter

Using appropriate data locations matters as they directly affect how your contracts store, access, and pay for data. The differences can have a large impact on cost, behaviour, and security of your smart contracts. Here’s how:

Gas Costs

  • Writing data to Storage is the most expensive.
  • The gas costs in Memory is more moderate than storage.
  • Calldata is the cheapest data location, i.e., writing to calldata costs the least amount of gas.

Persistence and Temporariness

  • Any data written to Storage lives onchain, meaning the data is permanent.
  • Memory only persists during the function’s lifecycle.
  • Calldata acts like memory in handling data, only it can’t be changed.

Mutability

  • Storage data can be modified.
  • Similar to Storage, Memory can be modified but only within the context of a function.
  • Calldata is read-only.

Safety

  • Storage can be a risky choice of location because mistakes or hacks can permanently change the blockchain’s state.
  • Memory is a safer option since changes are temporary.
  • Calldata is the safest for passing input for external functions.

Wrapping Up

That’s it for this piece, as previously stated, using the appropriate data locations is integral to the functionality of your contracts. I implore you to research further about the other types of data locations mentioned in the introduction of this article.

Happy Hacking!!

Sign Up For Daily Newsletter

Be keep up! Get the latest breaking news delivered straight to your inbox.
By signing up, you agree to our Terms of Use and acknowledge the data practices in our Privacy Policy. You may unsubscribe at any time.
Share This Article
Facebook Twitter Email Print
Share
What do you think?
Love0
Sad0
Happy0
Sleepy0
Angry0
Dead0
Wink0
Previous Article You can once again grab the impressive JBL Charge 5 for 28% off
Next Article Belkin’s first 25W Qi2 chargers power up multiple devices
Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Stay Connected

248.1k Like
69.1k Follow
134k Pin
54.3k Follow

Latest News

Temu goes live in South Africa, expanding its presence to six continents · TechNode
Computing
Join Our Next Livestream: Back to School in the Age of AI
Gadget
Finding Your Engineering Bottleneck: The Hierarchy of Engineering Needs
News
I Grew Up With These Cartoons—And They’re Still Worth Watching in 2025
Computing

You Might also Like

Computing

Temu goes live in South Africa, expanding its presence to six continents · TechNode

1 Min Read
Computing

I Grew Up With These Cartoons—And They’re Still Worth Watching in 2025

7 Min Read

Paid Amplification: How Paid Media Services Can Help You Drive Sales

2 Min Read
Computing

How to post on YouTube: the ultimate beginner’s guide

7 Min Read
//

World of Software is your one-stop website for the latest tech news and updates, follow us now to get the news that matters to you.

Quick Link

  • Privacy Policy
  • Terms of use
  • Advertise
  • Contact

Topics

  • Computing
  • Software
  • Press Release
  • Trending

Sign Up for Our Newsletter

Subscribe to our newsletter to get our newest articles instantly!

World of SoftwareWorld of Software
Follow US
Copyright © All Rights Reserved. World of Software.
Welcome Back!

Sign in to your account

Lost your password?