solidityノート(7)——記憶領域memory storage stack——2021.5.12
4129 ワード
solidityノート(7)——記憶領域memory storage stack
一丶memory:
メモリmemoryは、データを一時保存するために使用されます.格納された内容は、外部関数を含む関数が呼び出されたときに消去されるため、使用コストが比較的小さい.
二丶storage:
storageを格納し、契約宣言のすべての変数を格納します.仮想機会は、契約ごとに独立したストレージstorage領域を画定し、関数が相互に呼び出されるときに永続的に存在するため、使用コストが非常に大きい.
三丶stack:
スタックstackは、小型のローカル変数を格納するために使用されます.利用はほぼ無料ですが、容量は限られています.
四丶記憶領域:
異なるデータ型の変数には、それぞれのデフォルトの保管場所があります.
ステータス変数は常にストレージstorageに関数パラメータがデフォルトでメモリmemoryに格納される構造、配列、またはマッピングタイプのローカル変数が格納され、デフォルトではストレージstorageに格納される構造、配列、マッピングタイプ以外のローカル変数がスタックに格納されます.
五丶注意事項:
一般的なエラーは、ローカル変数を宣言し、メモリmemoryに作成されると考えられますが、ストレージstorageに作成されます.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x;
x.push(2);
data = x;
}
}
ローカル変数xのデータ型はuint[]storageですが、ストレージstorageは動的に割り当てられていないため、使用前にステータス変数で値を割り当てる必要があります.したがって、x自体はstorageを格納する空間を割り当てられず、代わりにstorageに既存の変数を格納する別名としてのみ使用される.実際には、コンパイラはxをストレージstorageポインタとして解析し、デフォルトではストレージスロットstorage slot 0にポインタを指します.これにより、someVariable(ストレージスロットstorage slot 0が格納されている)がx.push(2)によって変更されます.
注意:この例では、2つの契約変数someVariableとdataが、2つのストレージスロットstorage slot、すなわちストレージスロットstorage slot 0とストレージスロットstorage slot 1に予め割り当てられます.上記のプログラムでは、ローカル変数xは、変数someVariableが保存されているストレージスロットstorage slot 0へのポインタになります.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x = data;
x.push(2);
}
}
下一篇:solidity笔记(6)——modifier用法
solidityノート(6)——modifier使い方
下一篇:solidity笔记(8)——pure用法
solidityノート(8)——pure使い方
storageを格納し、契約宣言のすべての変数を格納します.仮想機会は、契約ごとに独立したストレージstorage領域を画定し、関数が相互に呼び出されるときに永続的に存在するため、使用コストが非常に大きい.
三丶stack:
スタックstackは、小型のローカル変数を格納するために使用されます.利用はほぼ無料ですが、容量は限られています.
四丶記憶領域:
異なるデータ型の変数には、それぞれのデフォルトの保管場所があります.
ステータス変数は常にストレージstorageに関数パラメータがデフォルトでメモリmemoryに格納される構造、配列、またはマッピングタイプのローカル変数が格納され、デフォルトではストレージstorageに格納される構造、配列、マッピングタイプ以外のローカル変数がスタックに格納されます.
五丶注意事項:
一般的なエラーは、ローカル変数を宣言し、メモリmemoryに作成されると考えられますが、ストレージstorageに作成されます.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x;
x.push(2);
data = x;
}
}
ローカル変数xのデータ型はuint[]storageですが、ストレージstorageは動的に割り当てられていないため、使用前にステータス変数で値を割り当てる必要があります.したがって、x自体はstorageを格納する空間を割り当てられず、代わりにstorageに既存の変数を格納する別名としてのみ使用される.実際には、コンパイラはxをストレージstorageポインタとして解析し、デフォルトではストレージスロットstorage slot 0にポインタを指します.これにより、someVariable(ストレージスロットstorage slot 0が格納されている)がx.push(2)によって変更されます.
注意:この例では、2つの契約変数someVariableとdataが、2つのストレージスロットstorage slot、すなわちストレージスロットstorage slot 0とストレージスロットstorage slot 1に予め割り当てられます.上記のプログラムでは、ローカル変数xは、変数someVariableが保存されているストレージスロットstorage slot 0へのポインタになります.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x = data;
x.push(2);
}
}
下一篇:solidity笔记(6)——modifier用法
solidityノート(6)——modifier使い方
下一篇:solidity笔记(8)——pure用法
solidityノート(8)——pure使い方
異なるデータ型の変数には、それぞれのデフォルトの保管場所があります.
ステータス変数は常にストレージstorageに関数パラメータがデフォルトでメモリmemoryに格納される構造、配列、またはマッピングタイプのローカル変数が格納され、デフォルトではストレージstorageに格納される構造、配列、マッピングタイプ以外のローカル変数がスタックに格納されます.
五丶注意事項:
一般的なエラーは、ローカル変数を宣言し、メモリmemoryに作成されると考えられますが、ストレージstorageに作成されます.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x;
x.push(2);
data = x;
}
}
ローカル変数xのデータ型はuint[]storageですが、ストレージstorageは動的に割り当てられていないため、使用前にステータス変数で値を割り当てる必要があります.したがって、x自体はstorageを格納する空間を割り当てられず、代わりにstorageに既存の変数を格納する別名としてのみ使用される.実際には、コンパイラはxをストレージstorageポインタとして解析し、デフォルトではストレージスロットstorage slot 0にポインタを指します.これにより、someVariable(ストレージスロットstorage slot 0が格納されている)がx.push(2)によって変更されます.
注意:この例では、2つの契約変数someVariableとdataが、2つのストレージスロットstorage slot、すなわちストレージスロットstorage slot 0とストレージスロットstorage slot 1に予め割り当てられます.上記のプログラムでは、ローカル変数xは、変数someVariableが保存されているストレージスロットstorage slot 0へのポインタになります.///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x = data;
x.push(2);
}
}
下一篇:solidity笔记(6)——modifier用法
solidityノート(6)——modifier使い方
下一篇:solidity笔记(8)——pure用法
solidityノート(8)——pure使い方
///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x;
x.push(2);
data = x;
}
}
///
pragma solidity ^0.4.0;
contract C {
uint someVariable;
uint[] data;
function f() public {
uint[] x = data;
x.push(2);
}
}
solidityノート(6)——modifier使い方