Structs
Structs in memory
Allocating a struct to memory:
struct Point {
uint256 x;
uint256 y;
}
function memPointer() external {
bytes32 x40;
assembly {
x40 := mload(0x40) // check contents of the free memory pointer
}
emit MemoryPointer(x40); // returns 0x80 -> 128
Point memory p = Point({x: 1, y: 2}); // allocate a struct in memory
assembly {
x40 := mload(0x40)
}
emit MemoryPointer(x40); // returns 0xc0 -> 192
}
// 0xc0 - 0x80 = 64 bytes -> two uint256s (size of the struct)
Seeing
msize
in action:
function memPointerV2() external {
bytes32 x40;
bytes32 _msize;
assembly {
x40 := mload(0x40)
_msize := msize()
}
emit MemoryPointerMsize(x40, _msize); // 0x80, 0x60 (since in betwyeen is empty)
Point memory p = Point({x: 1, y: 2});
assembly {
x40 := mload(0x40)
_msize := msize()
}
emit MemoryPointerMsize(x40, _msize); // 0xc0, 0xc0
assembly {
pop(mload(0xff)) // read a future byte but not write
x40 := mload(0x40)
_msize := msize()
}
emit MemoryPointerMsize(x40, _msize); // 0xc0, 0x120
}
Last updated