mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Differences in layout between memory and storage
- More explicit description with two examples - Moved index pointer to correct file
This commit is contained in:
parent
eb77ed080a
commit
c68efc6e03
@ -1,3 +1,6 @@
|
|||||||
|
|
||||||
|
.. index: calldata layout
|
||||||
|
|
||||||
*******************
|
*******************
|
||||||
Layout of Call Data
|
Layout of Call Data
|
||||||
*******************
|
*******************
|
||||||
|
@ -36,4 +36,37 @@ elements.
|
|||||||
definitely zeroed out memory area, using such a pointer non-temporarily
|
definitely zeroed out memory area, using such a pointer non-temporarily
|
||||||
without updating the free memory pointer can have unexpected results.
|
without updating the free memory pointer can have unexpected results.
|
||||||
|
|
||||||
.. index: calldata layout
|
|
||||||
|
Differences to Layout in Storage
|
||||||
|
================================
|
||||||
|
|
||||||
|
As described above the layout in memory is different from the layout in
|
||||||
|
:ref:`storage<storage-inplace-encoding>`. Below there are some examples.
|
||||||
|
|
||||||
|
Example for Difference in Arrays
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
The following array occupies 32 bytes (1 slot) in storage, but 128
|
||||||
|
bytes (4 items with 32 bytes each) in memory.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
uint8[4] a;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Example for Difference in Struct Layout
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
The following struct occupies 96 bytes (3 slots of 32 bytes) in storage,
|
||||||
|
but 128 bytes (4 items with 32 bytes each) in memory.
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
uint a;
|
||||||
|
uint b;
|
||||||
|
uint8 c;
|
||||||
|
uint8 d;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user