본문 바로가기

기타/솔리디티

솔리디티(solidity) 스토리지, 메모리, 스택

728x90

이더리움 가상 머신은 스토리지, 메모리, 스택 크게 3가지 영역으로 이우러져 있다.

https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

스토리지는 각각의 계정에 존재하는 영역으로 지속성이 있는 영역이다.key-value 형식으로 데이터를 저장하고 각각의 데이터는 256 bit words로 이루어져 있다. 컨트랙트 내에서 스토리지를 열거하는 것은 불가능하며 read function에서 비교적 많은 비용이 든다. 때문에 계약 생성시 스토리지 사용을 최소화하는 것이 비용면에서 효율적이다.

메모리는 컨트랙트 호출 input의 복사본을 저장하거나 function의 인자와 결과값을 저장한다. 스토리지와 달리 비영구적 저장소라 가스비가 비교적 작게 들지만 증설시 가스비 부담이 크다. 점점더 커질 수록 가스비가 급격히 증가하므로 많이 사용하지 않도록 주의해야 한다.

스택, 이더리움 가상 머신은 레지스터 머신이 아니라 스택 머신으로 모든 계산은 스택이라는 영역에서 수행된다. 최대 크기는 1024개이며 256비트의 워드를 포함한다. 스택이라는 자료 구조의 특성상 맨 위의 요소를 제거하지 않고 더 깊은 영역에 접근하는 것은 불가능하다.

 

https://docs.soliditylang.org/en/v0.8.13/introduction-to-smart-contracts.html#storage-memory-and-the-stack

 

Introduction to Smart Contracts — Solidity 0.8.13 documentation

» Introduction to Smart Contracts Edit on GitHub Introduction to Smart Contracts A Simple Smart Contract Let us begin with a basic example that sets the value of a variable and exposes it for other contracts to access. It is fine if you do not understand

docs.soliditylang.org

https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf

728x90