問題一覧に戻る
中級基本構文
問題38: メモリとストレージ
Solidityのメモリとストレージの重要な違いを学習します。ストレージは永続的なブロックチェーンストレージ - 高価ですが永続的です。メモリは一時的なRAM - 安価ですが関数実行後に失われます。ストレージ変数は参照(変更は元に影響)、メモリはコピーを作成します。この区別はガスコストに劇的に影響し、データの永続性を決定します。それぞれをいつ使用するかの理解はガスの最適化と正しいコントラクトの動作に不可欠です。ビュー関数は複雑な戻り値にmemoryを使用する必要があります。
pragma solidity ^0.8.0;
contract MemoryVsStorage {
string[] public data = ["A", "B", "C"];
// ストレージ参照で元を変更
function modifyStorage() public {
string[] arr = data;
arr[0] = "X";
}
// 一時データ用のメモリ
function readOnly() public view returns (string ) {
return data[0];
}
// メモリコピーを返す
function getCopy() public view returns (string[] ) {
return data;
}
}