일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Yes
- 웹개발
- 컴퓨터과학
- 소프트웨어
- 2
- 딥러닝
- 알고리즘
- 머신러닝
- 프로그래밍언어
- 버전관리
- 데이터구조
- 데이터분석
- 컴퓨터공학
- 데이터과학
- 네트워크
- 빅데이터
- 컴퓨터비전
- 데이터베이스
- 자료구조
- 네트워크보안
- 자바스크립트
- 파이썬
- 사이버보안
- 보안
- 프로그래밍
- 소프트웨어공학
- 인공지능
- 코딩
- I'm Sorry
- 클라우드컴퓨팅
- Today
- Total
스택큐힙리스트
이더리움 솔리디티에서 "memory" 키워드의 목적은 무엇인가요? 본문
샘플 계약서를 살펴볼 때, 때로는 memory를 사용하여 메서드에서 배열을 선언하고 때로는 그렇지 않을 때가 있습니다. 둘 사이에는 어떤 차이가 있나요?
답변 1
기억 키워드 없이 Solidity는 변수를 저장소에 선언하려고 시도합니다.
컴퓨터 전문가 인 당신입니다. 특수 기호를 유지한 채로 한국어로 번역하십시오.
솔리디티 개발자인 크리스에스: 스토리지는 가상 구조를 갖는 큰 배열로 생각할 수 있습니다... 이 구조는 런타임에서 변경할 수 없습니다 - 이는 계약의 상태 변수에 의해 결정됩니다.
이는 계약 생성 시 계약 레벨 변수 선언에 기반하여 저장소의 구조가 고정되며, 이후의 메소드 호출로 변경할 수 없다는 것을 의미합니다. 그러나 sendTransaction 호출을 통해 저장소의 내용을 변경할 수 있습니다. 이러한 호출은 상태를 변경하므로, 계약 레벨 변수를 상태 변수라고 부릅니다. 따라서 계약 레벨에서 선언된 변수 'uint8 storage var;' 는 uint8 (0-255)의 유효한 값으로 변경될 수 있지만, uint8 유형의 값을 위한 슬롯은 항상 유지됩니다.
함수에서 메모리 키워드 없이 변수를 선언하면, 솔리디티는 현재 컴파일은 되지만 예상치 못한 결과를 초래할 수 있는 저장 구조를 사용하려고 시도합니다. 메모리는 솔리디티에게 해당 메소드에서 변수를 위한 공간 청크를 런타임에서 생성하도록 지시하여, 해당 메소드에서의 변수 크기와 구조를 보장합니다.
기억 장치는 계약 수준에서 사용할 수 없습니다. 메서드에서만 사용할 수 있습니다.
FAQ에서 'the entry What is the memory keyword? What does it do?' 를 참조하세요. 제가 여기서 인용해 드리겠습니다:
이더리움 가상 머신은 항목을 저장할 수 있는 세 가지 영역을 가지고 있습니다.
당신은 컴퓨터 전문가입니다. 특수 기호를 그대로 유지하면서 한국어로 번역해주세요.
첫 번째는 저장소입니다. 모든 계약 상태 변수가 있는 곳입니다. 모든 계약은 고유한 저장소를 가지며, 함수 호출 사이에 지속되며 사용하기에는 상당히 비용이 많이 듭니다.
두 번째는 메모리입니다. 이는 임시 값들을 보관하는 데 사용됩니다. (외부) 함수 호출 사이에 지워지며 사용하기에 더 저렴합니다.
세 번째는 스택이고, 작은 지역 변수를 저장하는 데 사용됩니다. 사용이 거의 무료하지만, 제한된 양의 값만 저장할 수 있습니다.
거의 모든 종류에서는 저장할 위치를 지정할 수 없습니다. 왜냐하면 사용될 때마다 복사되기 때문입니다.
당신은 컴퓨터 전문가입니다. 특수 기호를 그대로 유지하면서 한국어로 번역해주세요.
저장 위치가 중요한 유형은 구조체와 배열입니다. 예를 들어 함수 호출에서 이러한 변수를 전달하면, 그들의 데이터는 메모리에 남거나 저장 공간에 남아 있을 경우 복사되지 않습니다. 이는 호출된 함수에서 그들의 내용을 수정할 수 있고, 이러한 수정사항이 호출하는 함수에서도 여전히 볼 수 있다는 것을 의미합니다.
변수 유형에 따라 저장 위치에 대한 기본값이 있습니다.
상태 변수는 항상 저장에 있습니다.
기능 인수는 항상 메모리에 있습니다.
로컬 변수는 기본적으로 struct, 배열 또는 매핑 유형의 참조 저장소입니다.
당신은 컴퓨터 전문가입니다. 특수 기호를 그대로 유지하면서 한국어로 번역하십시오.
값 유형의 지역 변수(즉, 배열, 구조체 또는 매핑이 아님)은 스택에 저장됩니다.
답변 2
이더리움 솔리디티에서 memory 키워드는 무엇을 할까요?memory 키워드는 이더리움 솔리디티 언어에서 메모리용 변수 선언을 나타내는 중요한 역할을 합니다. 이더리움은 분산 컴퓨팅 플랫폼으로서, 블록체인 기술을 기반으로 작동합니다. 이더리움 스마트 계약은 이더리움 가상 머신(EVM)에서 실행되며, 이때 메모리는 계약 내에서 데이터를 저장하고 처리하는 데 필요한 임시 공간으로 사용됩니다.
메모리는 EVM의 스택(임시 저장공간)의 하나로, 새로운 데이터를 일시적으로 저장하고 필요한 경우 읽거나 수정할 수 있는 임시 공간으로 사용됩니다. 예를 들어, 계약 내에서 함수 호출이 발생하면 해당 함수에 필요한 인수 또는 지역 변수들은 메모리에 저장됩니다. 메모리는 함수 호출이 완료되면 그 존재가 사라지는 휘발성 메모리로, 실행 상태와 연결되는 지역 변수로 사용되기도 합니다.
메모리를 선언할 때 memory 키워드를 사용하여 이 변수가 메모리 영역에서 사용될 것임을 명시적으로 표시합니다. 예를 들어, 다음과 같이 함수에서 memory 키워드를 사용하여 메모리 변수를 선언할 수 있습니다.
```
function exampleFunction(string memory _text) public {
// _text는 메모리에서 사용될 문자열 타입의 변수입니다.
}
```
이 때 memory 키워드를 사용하지 않고 선언할 경우, 기본적으로 스토리지 영역에 변수가 저장되거나 함수가 반환될 수도 있습니다. 따라서 memory 키워드를 명시적으로 사용하여 변수의 범위를 메모리에 한정시키는 것은 중요합니다.
memory 키워드를 사용하여 변수를 메모리에 할당할 경우, 블록체인 내에서 계약 함수의 실행 비용과 가스 사용량을 최적화할 수 있습니다. 메모리를 사용하는 것은 보다 효율적인 변수 관리를 가능하게 하여 계약 실행 속도를 향상시킬 수 있는 장점이 있습니다.
요약하자면, memory 키워드는 이더리움 솔리디티 언어에서 메모리용 변수 선언을 나타내며, 계약 내에서 임시적인 데이터 저장 및 처리를 위한 공간으로 사용됩니다. 이를 통해 함수 호출이 실행되거나 메모리 관리가 수행될 때 블록체인의 가스 사용량을 최적화하여 성능을 향상시킬 수 있습니다.
Keywords: 이더리움, 솔리디티, 메모리, 스마트 계약, 블록체인, 가스, 성능 최적화.