[Solidity] Solidity 메모리 영역

bolee·2022년 4월 22일
0

솔리디티(Solidity)

목록 보기
2/8
post-thumbnail
post-custom-banner

solidity는 4개의 저장 영역(데이터 위치)으로 나누어져 있다.
데이터 위치는 변수가 할당되는 방식을 변경하기 때문에 중요하다.

  • storage
  • memory
  • calldata
  • stack

storage

  • 대부분의 변수 및 함수들이 저장되는 저장 영역이다.
  • 지속되고 블록에 보관되기 때문에 가스 비용이 비싸다.
  • struct 데이터 구조의 경우 default로 storage 변수이기 때문에 함수 안에서 로컬 변수로 struct 데이터 구조를 정의할 때 memory타입인지 storage타입인지 명시해 줄 필요가 있다.

memory

  • 함수의 파라미터, 리턴값, 레퍼런스 타입이 주로 저장이 된다.
  • 일시적고 블록에 저장되지 않는다.
  • storage처럼 영속적이지 않고, 함수 내에서만 유효하기에 storage보다 가스 비용이 싸다.
  • 기본적으로 간단한 변수는 memory 타입인 데다 임시적이므로 블록에 저장되지 않는다.

calldata

  • 주로 외부(external) 함수의 파라미터에서 사용된다.
  • 외부 함수의 함수 매개 변수(반환 매개변수 제외)는 calldata에 강제 저장되며 거의 memory처럼 작동한다.

stack

  • EVM(Ethereum Virtual Machine)에서 stack data를 관리할때 쓰는 영역이다.
  • 1024Mb로 제한적이다.

변수 데이터 위치 요약

  1. 강제 데이터 위치
    • 외부 함수의 매개 변수(반환값 미포함): calldata
    • 상태 변수: storage
  2. 기본 데이터 위치
    • 함수의 매개변수(반환값 포함): memory
    • 모든 지역 변수: storage
post-custom-banner

0개의 댓글